过滤器&字符串包含某些字符的子集(在R中)

时间:2016-10-13 23:31:10

标签: r string filter grep subset

我目前希望将数据框划分为子集以进行培训/测试。在数据框中有列包含不同的项目,有些包含子项目(如Aisle01,Aisle02等)我通过过滤掉多列中的部分字符串来绊倒。

数据样本:

Column1   Column2  Column3

Wall01    Wall04   45.6
Wall04    Aisle02  65.7
Aisle06   Wall01   45.0
Aisle01   Wall01   33.3
Wall01    Wall04   21.1

如果我的数据框(x)包含两列,其中包含多个版本的“Aisle”,我希望从包含“Aisle”的两列中过滤掉所有内容。想知道下面的一行是否在某种程度上正确?

  
    

filter(x,column1& column2 == grep(x $ column1& x $ column2,“Aisle”))

  

期望的结果:

Column1  Column2  Column3

Wall04   Aisle02  65.7
Aisle06  Wall01   45.0
Aisle01  Wall01   33.3

提前谢谢。

1 个答案:

答案 0 :(得分:2)

我能看到的最简单的解决方案是:

x <- x[grepl("Aisle", x[["column1"]]) | grepl("Aisle", x[["column2"]]), ]

使用grepl代替grep会产生逻辑,因此您可以使用|操作来选择行。另外,我只想快速浏览一下代码中可能会给您带来麻烦的几个地方。

  1. x$column1 & x$column2语句开头的grep表示该函数会尝试在&中的每个条目上成对运行column1操作和column2。由于这些是字符而不是逻辑,因此会产生一些奇怪的结果。

  2. grep中,您要匹配的pattern位于您尝试匹配的字符串之前,因此它应该是grep("Aisle", columnValue)而不是相反。运行?functionName将为您提供有关该功能的信息,因此您不必尝试从内存中解决该问题。

  3. filter是时间序列(ts)对象的函数,而不是数据框。我很惊讶你没有通过这种方式使用它来获得错误。

  4. 祝你好运。如果您想要澄清任何内容,请评论。