[英]Filter & Subset if a String Contains Certain Characters at specific position (in R)
[英]Filter & Subset if a String Contains Certain Characters (in R)
我目前希望将数据帧划分为用于训练/测试的子集。 在数据框中,有些列包含不同的项目,有些列包含子项目,如(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
提前谢谢你。
我能看到的最简单的解决方案是:
x <- x[grepl("Aisle", x[["column1"]]) | grepl("Aisle", x[["column2"]]), ]
使用grepl
而不是grep
会产生一个逻辑,因此您可以使用|
操作来选择您的行。 另外,我只是想快速检查一下您的代码中可能会给您带来麻烦的几个地方。
grep
语句开头的x$column1 & x$column2
意味着该函数将尝试对column1
和column2
每个条目成对运行&
操作。 由于这些是字符而不是逻辑,这会产生一些奇怪的结果。
在grep
,您尝试匹配的pattern
出现在您尝试匹配的字符串之前,因此它应该是grep("Aisle", columnValue)
而不是相反。 运行?functionName
将为您提供有关该函数的信息,因此您不必尝试从记忆中找出答案。
filter
是时间序列 ( ts
) 对象的函数,而不是数据帧。 我很惊讶您以这种方式使用它没有出错。
祝你好运。 如果您想澄清任何事情,请发表评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.