繁体   English   中英

如果字符串包含某些字符,则过滤和子集(在 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会产生一个逻辑,因此您可以使用| 操作来选择您的行。 另外,我只是想快速检查一下您的代码中可能会给您带来麻烦的几个地方。

  1. grep语句开头的x$column1 & x$column2意味着该函数将尝试对column1column2每个条目成对运行&操作。 由于这些是字符而不是逻辑,这会产生一些奇怪的结果。

  2. grep ,您尝试匹配的pattern出现在您尝试匹配的字符串之前,因此它应该是grep("Aisle", columnValue)而不是相反。 运行?functionName将为您提供有关该函数的信息,因此您不必尝试从记忆中找出答案。

  3. filter是时间序列 ( ts ) 对象的函数,而不是数据帧。 我很惊讶您以这种方式使用它没有出错。

祝你好运。 如果您想澄清任何事情,请发表评论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM