我有一个由数百种动物组成的向量(这些动物都不重复),我希望 "鲸鱼 "排在第一位。我不关心任何其他元素的顺序,我也不能指定类似字母顺序的东西。我怎样才能让这样的东西。
animals <- c("cat", "dog", "whale", "pig", "zebra", "emu")
不用重新输入每一个元素就能变成这样
whale_first <- c("whale", "cat", "dog", "pig", "zebra", "emu")
我试过用sort()和str_order(), 但我找不到只指定第一个元素的方法。另外,在最后的答案中,其他动物的顺序并不重要。我的例子中除了鲸鱼之外,其他动物的顺序都是一样的,但是我可以接受其他动物的任何顺序。
谢谢!我有一个上百个动物的矢量。
一个单行本是 setdiff
(假设没有重复)
c("whale", setdiff(animals, 'whale'))
如果有重复,使用 vsetdiff
library(vecsets)
c("whale", vsetdiff(animals, 'whale'))
交换。
first <- animals[1]
i <- grep("whale", animals)
animals[1] <- animals[i]
animals[i] <- first
如果你不在乎:
i <- grep("whale", animals)
c(animals[i],animals[-i])
当然你也可以这样做。
c("whale", grep("whale", animals, value = TRUE, invert=TRUE))
一个基本的R方法,是安全的 复制是重新排序因素。
animals = factor(animals)
levels(animals) = c('whale', setdiff(levels(animals), 'whale'))
animals = as.character(animals)