请注意以下数据,我对每个水果有多少独特合作伙伴的问题感兴趣?
我的df:
fruit1 fruit2
1 guava kiwi
2 lemon pear
3 pear apple
4 guava kiwi
5 pear guava
6 apple kiwi
7 banana lemon
8 lemon kiwi
9 apple banana
10 lemon guava
我正在努力掌握dplyr和tidyr。为此,我认为在dplyr中使用n_distinct()
会很好。我做了以下事情:
rbind (df %>%select(fruita=fruit1,fruitb=fruit2),
df %>%select(fruita=fruit2,fruitb=fruit1)) %>%
group_by(fruita) %>%
summarise(Partners=n_distinct(fruitb)) %>%
arrange(desc(Partners))
这基本上复制了下面的10行,但是在下半部分切换了水果的顺序。然后我计算新第一列中的每个水果,使用n_distinct()
在新的第二列中有多少独特的合作伙伴水果。
这样做很好,但考虑到dplyr
和tidyr
的优雅程度,我想知道是否有更有效的方法可以做到这一点,特别是如果有办法执行{{{ 1}}比如使用其中一个包吗?
最终数据如下所示:
rbind
复制数据:
fruita Partners
1 lemon 4
2 apple 3
3 guava 3
4 pear 3
5 kiwi 3
6 banana 2
答案 0 :(得分:7)
不确定这是否有帮助:
df %>%
do(data.frame(fruita=unlist(.), fruitb=unlist(.[,2:1]))) %>%
group_by(fruita) %>%
summarise(Partners=n_distinct(fruitb)) %>%
arrange(desc(Partners))
#Source: local data frame [6 x 2]
# fruita Partners
# 1 lemon 4
# 2 apple 3
# 3 guava 3
# 4 pear 3
# 5 kiwi 3
# 6 banana 2