在dplyr中的字符串列上过滤多个值

我data.frame在其中一列中有一个字符数据。我想data.frame在同一列中过滤多个选项。有没有一种简单的方法可以做到这一点,我错过了?


示例: data.frame name =dat


days      name

88        Lynn

11          Tom

2           Chris

5           Lisa

22        Kyla

1          Tom

222      Lynn

2         Lynn

我想过滤一下Tom,Lynn例如。

当我做:


target <- c("Tom", "Lynn")

filt <- filter(dat, name == target)

我收到此错误:


longer object length is not a multiple of shorter object length


翻翻过去那场雪
浏览 764回答 3
3回答

波斯汪

你需要%in%而不是==:library(dplyr)target <- c("Tom", "Lynn")filter(dat, name %in% target)&nbsp; # equivalently, dat %>% filter(name %in% target)产生&nbsp; days name1&nbsp; &nbsp;88 Lynn2&nbsp; &nbsp;11&nbsp; Tom3&nbsp; &nbsp; 1&nbsp; Tom4&nbsp; 222 Lynn5&nbsp; &nbsp; 2 Lynn要了解原因,请考虑这里发生的事情:dat$name == target# [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE&nbsp; TRUE基本上,我们将两个长度target向量回收四次以匹配长度dat$name。换句话说,我们正在做:&nbsp;Lynn == Tom&nbsp; Tom == LynnChris == Tom&nbsp;Lisa == Lynn&nbsp;... continue repeating Tom and Lynn until end of data frame在这种情况下,我们不会收到错误,因为我怀疑您的数据框实际上有不同数量的行不允许回收,但您提供的示例(8行)。如果样本有一个奇数行,我会得到与你相同的错误。但即使回收工作,这显然不是你想要的。基本上,该陈述dat$name == target相当于说:返回TRUE等于“Tom”的每个奇数值或等于“Lynn”的每个偶数值。碰巧的是,样本数据框中的最后一个值是偶数并且等于“Lynn”,因此TRUE上面的那个值。相比之下,dat$name %in% target说:对于每个值dat$name,检查它是否存在于target。非常不一样。结果如下:[1]&nbsp; TRUE&nbsp; TRUE FALSE FALSE FALSE&nbsp; TRUE&nbsp; TRUE&nbsp; TRUE注意你的问题与之无关dplyr,只是误用了==。

元芳怎么了

使用base包:df <- data.frame(days = c(88, 11, 2, 5, 22, 1, 222, 2), name = c("Lynn", "Tom", "Chris", "Lisa", "Kyla", "Tom", "Lynn", "Lynn"))# Three linestarget <- c("Tom", "Lynn")index <- df$name %in% targetdf[index, ]# One linedf[df$name %in% c("Tom", "Lynn"), ]&nbsp;输出:&nbsp; days name1&nbsp; &nbsp;88 Lynn2&nbsp; &nbsp;11&nbsp; Tom6&nbsp; &nbsp; 1&nbsp; Tom7&nbsp; 222 Lynn8&nbsp; &nbsp; 2 Lynn使用sqldf:library(sqldf)# Two alternatives:sqldf('SELECT *&nbsp; &nbsp; &nbsp; FROM df&nbsp;&nbsp; &nbsp; &nbsp; WHERE name = "Tom" OR name = "Lynn"')sqldf('SELECT *&nbsp; &nbsp; &nbsp; FROM df&nbsp;&nbsp; &nbsp; &nbsp; WHERE name IN ("Tom", "Lynn")')
打开App,查看更多内容
随时随地看视频慕课网APP