如何在 R 中按属性"names"对向量进行排序,但保持第一个元素不变?



假设我有一个向量,其名称如下:

vct <- c(67, "apple", 88, "orange", 71)
names(vct) <- c("c1", "b2", "d66", "a65", "a11")

现在,我希望第一个元素67保持原样,并按照名称的顺序排列其余元素。使得它看起来:";67〃"71〃"橙色"苹果"88〃;。

你的意思是这样的吗?

first <- 67
inds <- match(first, vct)
result <- vct[c(inds, setdiff(order(names(vct)), inds))]
result
#      c1      a11      a65       b2      d66 
#    "67"     "71" "orange"  "apple"     "88" 

您可以使用-1排除第一个,按名称排序其余部分,添加1和c,并使用1:

vct[c(1, order(names(vct)[-1])+1)]
#      c1      a11      a65       b2      d66 
#    "67"     "71" "orange"  "apple"     "88"