【发布时间】:2018-03-26 21:11:55
【问题描述】:
我有一个名称数据框(名字和姓氏,有些是大写的,有些不是)和与每个名字相关的分数:
df = data.frame(name = c("Mark Johnson","John Roberts","Sue mcguire","kat Long","dan Scott"), name2 = c("sam marks", "Mark Jones", "tim briar", "jonas Stark", "Mike Robinson"), score = c(2,3,4,5,5))
name name2 score
1 Mark Johnson sam marks 2
2 John Roberts Mark Jones 3
3 Sue mcguire tim briar 4
4 kat Long jonas Stark 5
5 dan Scott Mike Robinson 5
我希望能够仅通过包含 either 列中的名字或姓氏来过滤我的数据框,例如:
df %>% filter(name %in% c("mark","john","Long","briar"))
我想避免使用grepl,而是使用filter 和%in%。但是,这会返回:
[1] name score
<0 rows> (or 0-length row.names)
而不是第 1、2、3 和 4 行。name|name2 也不起作用。也许是因为我需要在name 和name2 列上执行strsplit() 或类似的操作,然后重新组合。但是,这不是很优雅,我的 df 实际上是数百万行,所以对我来说性能很重要。实现这一目标的最佳方法是什么?
【问题讨论】: