用下面的数据说,我对每个水果有多少个独特的伙伴感兴趣?
我的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。为此,我认为使用n_distinct()
in dplyr 会很好。我做了以下事情:
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
,我想知道是否有更有效的方法来做到这一点,尤其是如果有一种方法可以rbind
使用其中一个包来执行这样的操作?
最终数据如下所示:
fruita Partners
1 lemon 4
2 apple 3
3 guava 3
4 pear 3
5 kiwi 3
6 banana 2
复制数据:
structure(list(fruit1 = structure(c(3L, 4L, 5L, 3L, 5L, 1L, 2L,
4L, 1L, 4L), .Label = c("apple", "banana", "guava", "lemon",
"pear"), class = "factor"), fruit2 = structure(c(4L, 6L, 1L,
4L, 3L, 4L, 5L, 4L, 2L, 3L), .Label = c("apple", "banana", "guava",
"kiwi", "lemon", "pear"), class = "factor")), .Names = c("fruit1",
"fruit2"), class = "data.frame", row.names = c(NA, -10L))