【问题标题】:Select column names by regex pattern按正则表达式模式选择列名
【发布时间】:2018-09-25 01:23:26
【问题描述】:

我想选择以下列四种方式之一开始的所有列:CB、LB、LW、CW,但不选择任何具有字符串“con”的列。

我目前的做法是:

tester <- df_ans[,names(df_ans) %in% colnames(df_ans)[grepl("^(LW|LB|CW|CB)[A-Z_0-9]*",colnames(df_ans))]]
tester <- tester[,names(tester) %in% colnames(tester)[!grepl("con",colnames(tester))]]

在像 dplyr 这样的库中是否有更好/更有效的方法来执行此操作?

【问题讨论】:

  • 请展示一个可重现的小例子和预期的输出

标签: r regex dplyr


【解决方案1】:

我们可以使用matches

library(dplyr)
df %>%
   select(matches("^(CB|LB|LW|CW)"), -matches("con"))
#   CB1 LB2 CW3 LW20
#1   3   9   6    1
#2   3   3   4    5
#3   7   7   7    7
#4   5   8   7    2
#5   6   3   3    3

数据

set.seed(24)
df <- as.data.frame(matrix(sample(1:9, 10 * 5, replace = TRUE),
       ncol = 10, dimnames = list(NULL, c("CB1", "LB2", "CW3", "WC1",
     "LW20", "conifer", "hercon", "other", "other2", "other3"))))

【讨论】:

  • 啊,不知道比赛。谢谢!
  • 我收到“错误:所有参数必须是字符向量,而不是整数”
  • @Parseltongue 抱歉,我必须删除 one_of
【解决方案2】:

试试这个:

nms <- names(df_ans)
df_ans[ grepl("^(LW|LB|CW|CB)", nms) & !grepl("con", nms) ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    相关资源
    最近更新 更多