gpt4 book ai didi

r - dplyr 根据字符串匹配选择列

转载 作者:行者123 更新时间:2023-12-04 08:10:18 24 4
gpt4 key购买 nike

我想通过字符串匹配对数据框的列进行排序。

library(dplyr)
data <- data.frame(start_a = 1,
start_f = 3,
end_a = 5,
end_f = 7,
middle_a= 9,
middle_f = 11)
  • 例如我想选择 start_f, start_a, middle_f, middle_a, end_f ,end_a
  • 我正试图用 data %>% select(matches("(start|middle|end)_(f|a)"))) 这样做,以便我在匹配项中输入的顺序是我希望选择列的顺序。
  • 所需的输出是 data[c(2,1,6,5,4,3)]
  • 最佳答案

    您可以使用 outer 按照您想要的顺序构造列.

    order1 <- c('start', 'middle', 'end')
    order2 <- c('f', 'a')
    cols <- c(t(outer(order1, order2, paste, sep = '_')))
    cols
    #[1] "start_f" "start_a" "middle_f" "middle_a" "end_f" "end_a"

    data[cols]
    # start_f start_a middle_f middle_a end_f end_a
    #1 3 1 11 9 7 5
    如果不是 order1 的所有组合和 order2存在于我们可以使用的数据中 any_of这将仅选择 data 中存在的列没有给出任何错误。
    library(dplyr)
    data %>% select(any_of(cols))

    根据名称中的模式进行选择。
    order1 <- c('start', 'middle', 'end')
    order2 <- c('f', 'a')
    pattern <- c(t(outer(order1, order2, function(x, y) sprintf('^%s_%s.*', x, y))))
    pattern
    #[1] "^start_f.*" "^start_a.*" "^middle_f.*" "^middle_a.*" "^end_f.*" "^end_a.*"
    cols <- names(data)

    data[sapply(pattern, function(x) grep(x, cols))]

    # start_f start_a middle_f middle_a end_f end_a
    #1 3 1 11 9 7 5

    关于r - dplyr 根据字符串匹配选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66007305/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com