我目前希望将数据框划分为子集以进行培训/测试。在数据框中有列包含不同的项目,有些包含子项目(如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
提前谢谢。
答案 0 :(得分:2)
我能看到的最简单的解决方案是:
x <- x[grepl("Aisle", x[["column1"]]) | grepl("Aisle", x[["column2"]]), ]
使用grepl
代替grep
会产生逻辑,因此您可以使用|
操作来选择行。另外,我只想快速浏览一下代码中可能会给您带来麻烦的几个地方。
x$column1 & x$column2
语句开头的grep
表示该函数会尝试在&
中的每个条目上成对运行column1
操作和column2
。由于这些是字符而不是逻辑,因此会产生一些奇怪的结果。
在grep
中,您要匹配的pattern
位于您尝试匹配的字符串之前,因此它应该是grep("Aisle", columnValue)
而不是相反。运行?functionName
将为您提供有关该功能的信息,因此您不必尝试从内存中解决该问题。
filter
是时间序列(ts
)对象的函数,而不是数据框。我很惊讶你没有通过这种方式使用它来获得错误。