遵循模式时按名称获取列索引

时间:2018-07-17 08:08:29

标签: r

我有一个像下面的dtaframe

lagged_1_FF, lagged_2_FF, lagged_1_HG,lagged_3_JK
1,2,3,NA

我想获取以lagged_1或lagged_2开头的所有列的索引

然后我想通过子集命令删除它们,

我可以使用grep命令来删除一列,但不能像上面那样模仿吗?

responseIndex=grep("outcome", colnames(data2))
trainData=subset(data2[(it+20):(it+40),],select=-c(responseIndex))

1 个答案:

答案 0 :(得分:1)

可以使用带有正则表达式的grep()(但我更喜欢grepl())来对data.frame进行子集化,像这样:

df <- data.frame(
  lagged_1_FF = 1, lagged_2_FF = 2, lagged_1_HG = 3, lagged_3_JK = NA
)

df[grep("^lagged_[12]", names(df))]
  lagged_1_FF lagged_2_FF lagged_1_HG
1           1           2           3
# Or if you prefer subset()
subset(df, select = grep("^lagged_[12]", names(df)))

但是正则表达式很难。.您可以通过以下方式避免它们:

df[startsWith(names(df), c("lagged_1", "lagged_2"))]
# or
subset(df, select = startsWith(names(df), c("lagged_1", "lagged_2")))