我有一个参考表,其中有人名和属性(坏电子邮件)
我希望根据下面的人名来对表格进行分组
我尝试了两种方法来处理这个
# 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,但我只是希望首先围绕这个概念
答案 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 ))