如何在过滤器内使用%in%

时间:2017-10-01 20:55:08

标签: r dplyr

我有两个数据集:sales_by_weektop_sellers。我正在尝试在sales_by_week中为top_sellers中排名前10位的项目制作数据图表。我正在使用filter%in%部分挣扎。我想将数据过滤到只有10个产品ID。

sales_by_week %>%
  filter(product_id %in% c(filter(top_sellers, rank <= 10) %>%   # HOW DO I DO THIS LINE?
  select(product_id))) %>%
  group_by(week) %>%
  summarize(sales_qty = sum(sales_qty)) %>%
  ggplot(aes(x = week)) +
  geom_line(aes(y = sales_qty, color = product_id))

使用上面的代码,我收到错误Error in filter_impl(.data, dots) : comparison (4) is possible only for atomic and list types

我的数据看起来像这样

enter image description here

enter image description here

怎么做

1 个答案:

答案 0 :(得分:1)

如果没有样本数据框,这是完全难以完成的,但我认为这应该大致有效。

top = top_sellers[top_sellers$rank <= 10, ]
sales_by_week = sales_by_week[sales_by_week$product_id %in% top$product_id, ]

看起来sales_by_week只有数字而top_products有字母,所以gsub会删除所有数字。如果这是错的,只需删除该部分。

你的行看起来像

filter(product_id %in% top$product_id)