我有一个像下面的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))
答案 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")))