我目前希望将数据帧划分为用于训练/测试的子集。在数据框中,有些列包含不同的项目,有些列包含子项目,如(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
Run Code Online (Sandbox Code Playgroud)
如果我的数据框 (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
Run Code Online (Sandbox Code Playgroud)
先感谢您。
我能看到的最简单的解决方案是:
x <- x[grepl("Aisle", x[["column1"]]) | grepl("Aisle", x[["column2"]]), ]
Run Code Online (Sandbox Code Playgroud)
使用grepl而不是grep产生逻辑,因此您可以使用该|操作来选择您的行。另外,我只是想快速检查一下您的代码中可能给您带来麻烦的几个地方。
在x$column1 & x$column2你的开头grep声明意味着该函数将尝试运行&在每个条目的操作成对的column1和column2。由于这些是字符而不是逻辑,这会产生一些奇怪的结果。
在grep对pattern你试图匹配而来的字符串,然后试图匹配到,所以应该grep("Aisle", columnValue)不是周围的其他方式。运行?functionName将为您提供有关该函数的信息,因此您不必尝试从记忆中找出它。
filter是时间序列 ( ts) 对象的函数,而不是数据帧。我很惊讶您以这种方式使用它没有出错。
祝你好运。如果您想澄清任何事情,请发表评论。