【问题标题】:r specify the first element in a vectorr 指定向量中的第一个元素
【发布时间】:2020-08-22 02:19:16
【问题描述】:

我有数百只动物的载体(没有一个重复),我希望“鲸鱼”排在第一位。我不关心任何其他元素的顺序,也不能指定字母顺序之类的东西。我将如何制作这样的东西:

animals <- c("cat", "dog", "whale", "pig", "zebra", "emu")

如下所示,无需重新键入每个元素:

whale_first <- c("whale", "cat", "dog", "pig", "zebra", "emu")

我尝试查看 sort() 和 str_order(),但找不到仅指定第一个元素的方法。此外,在最终答案中,其他动物的顺序无关紧要。我在这里的示例将它们全部按相同的顺序排列,除了鲸鱼,但我会以任何顺序接受所有其他动物。

谢谢!

【问题讨论】:

  • 试试c("whale", setdiff(animals, 'whale'))
  • 在同一个主题中,当我想以编程方式使用一个或多个执行此操作并且对缺失具有鲁棒性时,我会执行c(intersect(c("whale", "dolphin"), animals), setdiff(animals, c("whale", "dolphin"))) 之类的操作。不过,正如@akrun 建议的那样,这确实会删除重复项。

标签: r string sorting vector stringr


【解决方案1】:

交换:

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))

【讨论】:

    【解决方案2】:

    单行是setdiff(假设没有重复)

    c("whale", setdiff(animals, 'whale'))
    

    如果有重复,使用vsetdiff

    library(vecsets)
    c("whale", vsetdiff(animals, 'whale'))
    

    【讨论】:

      【解决方案3】:

      对重复项安全的基本 R 方法是重新排序因子:

      animals = factor(animals)
      levels(animals) = c('whale', setdiff(levels(animals), 'whale'))
      animals = as.character(animals)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-21
        • 2015-03-04
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 2021-03-24
        • 1970-01-01
        相关资源
        最近更新 更多