根据值是否在另一帧的一列的前12行中来过滤()数据帧

时间:2018-12-08 19:53:33

标签: r dataframe dplyr

我正在处理一个朋友上个月内发送的所有手套的索引。它位于框架df中,相关属性为totime。我想隔离to中12个最常用名称中的任何一个的实例。我有一个数据帧summary,其中每个to的唯一值及其频率。 summary的定义是:

> summary <- arrange(count(df, to), desc(n))

我尝试使用filter()比较df$tohead(summary$to, 12)的值

> top12 <- filter(df, to == head(summary$to, 12))

这给了我错误

Warning message:
In to == head(summary$to, 12) :
  longer object length is not a multiple of shorter object length

top12的一个非常奇怪的数据帧,它似乎从每个to中随机选择实例,并且行数少于前5个to值中每个实例的行数。我可以使用带有手动输入名称的矢量来获得我应该的名称,但是我想要一个可扩展的解决方案,这样当我添加未来几个月的数据时,我可以轻松扩展或缩小包含的范围并轻松更新。由于矢量有效,因此我尝试将head(summary$to, 12)转换为矢量,但遇到相同的错误。

> top12 <- filter(df, to == c("name 1","name 2", ... "name 12"))
> top12 <- filter(df, to == as.vector(head(summary$to, 12)))
Warning message:
In to == as.vector(head(summary$to, 12)) :
  longer object length is not a multiple of shorter object length

我在做什么错?还有其他简洁的方法可以做同样的事情吗?

1 个答案:

答案 0 :(得分:1)

尝试:

top12 <- filter(df, to %in% summary$to[1:12])