【问题标题】:How can I use regular expression to select the columns of data frame in r?如何使用正则表达式在 r 中选择数据框的列?
【发布时间】:2019-09-22 21:20:43
【问题描述】:

我有以下数据框。

D <- data.frame(A123.case.vs.B123.Cntl._FC = 1:4, B123.case.vs.B123.Cntl._FC = 0:3, A123.case.vs.D123.Cntl._FC= 2:5, FC = 1:4, A123.case= 0:3, B123.cntrl = 0:3)

我想使用正则表达式选择前 3 列。

这是我正在尝试的,但它不起作用。

D %>% select(contains("case.vs.[a-z]*[0-9].cntl"))

你知道我的问题在哪里吗?

谢谢

【问题讨论】:

  • grep("case.vs.[a-z]*[0-9].cntl", names(D)) 返回 0。所以看起来问题出在您的正则表达式模式
  • 问题是如果你检查 ?select_helpers contains - Contains a literal string. 在这里,你已经包含了文字和正则表达式,它们将无法工作,因为它会寻找 [a-z]*as 文字模式

标签: r regex dataframe select


【解决方案1】:

下面的正则表达式可以满足问题的要求。

library(dplyr)

D %>% select(matches('case\\.vs\\.[[:alpha:]][[:digit:]]+'))
#  A123.case.vs.B123.Cntl._FC B123.case.vs.B123.Cntl._FC A123.case.vs.D123.Cntl._FC
#1                          1                          0                          2
#2                          2                          1                          3
#3                          3                          2                          4
#4                          4                          3                          5

【讨论】:

  • 谢谢。我也想在我的表达中添加“cntl”。我正在使用这个命令 matches("case\\.vs\\.[[:alpha:]][[:digit:]].cntl\\+") 但它不起作用。
  • 试试'case\\.vs\\.[[:alpha:]][[:digit:]]+\\.Cntl'。 “+”表示前面的一个或多个术语,即在这种情况下是一个或多个数字。您还需要在 '.' 前面使用 '\\'以便按字面意思对待,
猜你喜欢
  • 2012-03-20
  • 2021-12-29
  • 2015-08-28
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多