R 按照模式按名称获取列索引

R 按照模式按名称获取列索引,r,R,我有一个如下所示的数据帧 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(res

我有一个如下所示的数据帧

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))
您可以将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")))
new_data=data2[grep(“lagged_1 | lagged_2”,x,invert=TRUE)]
library(dplyr);选择(dat,-以('lagged_1')开头,-以('lagged_2')开头)