过滤,R中的子数据

时间:2015-08-11 14:06:35

标签: r filter subset dplyr

我有一个参考表,其中有人名和属性(坏电子邮件)

我希望根据下面的人名来对表格进行分组

我尝试了两种方法来处理这个

# Returns nothing
subset(bad.email, User.Name %in% c('John'))
filter(bad.email, User.Name %in% 'John')

# returns what im looking for
subset(bad.email, grepl("John", User.Name ))
filter(bad.email, grepl("John", User.Name ))

有谁可以解释为什么会出现这种情况?

最后我想用参考表中的列替换john,但我只是希望首先围绕这个概念

1 个答案:

答案 0 :(得分:2)

根据@akrun和@David Arenburg的反馈

前两行代码可能无法工作的原因是字段中可能有空格。 最初读取文件时,可以通过设置strip.white = TRUE来删除空格。或者使用stringr库中的str_trim(col_name)也可以执行此操作

第二个原因是我的代码没有工作的主要原因是%%与您正在寻找的模式完全匹配。

在我的情况下,在该字段中有姓氏,我只匹配名字。要解决此问题,请使用grepl匹配整个名称或匹配。 grepl区分大小写,因此添加ignore.case选项为true将匹配字段而忽略大小写

# remove whitespace
bad.email$User.Name <- str_trim(bad.email$User.Name)

# returns what im looking for using %in%
subset(bad.email, User.Name %in% c('John Smith'))
filter(bad.email, User.Name %in% 'John Smith')

# returns what im looking for using grepl
subset(bad.email, grepl("John Smith", User.Name, ignore.case = TRUE ))
filter(bad.email, grepl("John Smith", User.Name, ignore.case = TRUE ))