在R中过滤数据框:将GREP与变量名结合吗?

时间:2019-04-29 09:16:10

标签: r

我希望基于两个条件来过滤数据帧:1.几个关键变量,以及2.具有特定模式的其他几个变量。

通常我使用以下代码:

mydata <- rawData[,c("scenario","period","farmID",grep("planting_*",names(rawData), value = TRUE))]

我将R更新到新版本(3.5.3)后,出现了问题。在工作正常之前,我得到了我想要的:一个由变量过滤的新数据框。

但是,现在R仅返回带有变量名的向量(没有观察到)。

有人可以帮我解决这个问题吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

此代码永远无效:您不能在同一子集向量中混用名称和数字索引。

此外,您的正则表达式是错误的:*应该为.* —否则,您将搜索单词planting,后跟零个或多个下划线。对于您而言,这没有什么不同,但它是不同的表达方式,因此会误导您的代码读者。

但是,您可以通过使grep返回匹配的名称而不是索引来使它工作:

planting_names <- grep("planting_.*", names(rawData), value = TRUE)
mydata <- rawData[ , c("scenario", "period", "farmID", planting_names)]