我有一个数据框,其中包含有关模型,子类型和一些其他数据的信息。在此示例中,子类型只有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)
这行得通,但对我来说,它看起来过于工程化,我想知道是否有更好的方法可以做到这一点。
[编辑:] 主要问题是:如何避免附加联接,这使该问题不同于建议的重复联接。无论如何:给出的答案符合我的需求。
答案 0 :(得分:2)
您的代码可以缩短为:
test %>%
group_by(model) %>%
filter(n_distinct(type) == 2)