有没有一种方法可以与dplyr进行总结和合并

时间:2019-02-21 10:08:01

标签: r dplyr

我有一个数据框,其中包含有关模型,子类型和一些其他数据的信息。在此示例中,子类型只有1和2。在进一步的分析中,我仅需要同时具有两个子类型的模型的数据。

我的目标专家会收到一个列表,其中包含A和B的所有值(即模型,类型和Additional_cell),但没有C的数据(因为只有模型1可用)

到目前为止,我的解决方案:使用true(n_distinct)来检测两个子类型是否都可用(如果为true),则对它们进行过滤,然后重新加入旧数据帧以获取其他单元格。在代码中:

test = data.frame(model=c("A", "A", "B", "B", "C"), type=c(1,2,1,2,1), additional_cell=c(10,10,10,10,10))
test %>% 
  group_by(model) %>% 
  summarise(both_types = n_distinct(type)) %>% 
  filter(both_types==2) %>% 
  left_join(test, by="model") %>% 
  select(-both_types)

这行得通,但对我来说,它看起来过于工程化,我想知道是否有更好的方法可以做到这一点。

[编辑:] 主要问题是:如何避免附加联接,这使该问题不同于建议的重复联接。无论如何:给出的答案符合我的需求。

1 个答案:

答案 0 :(得分:2)

您的代码可以缩短为:

test %>% 
  group_by(model) %>% 
  filter(n_distinct(type) == 2)