次のデータを使用して、それぞれの果物がいくつの固有のパートナーを持っているかという質問に興味がありますか?
私の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 行が複製されますが、下半分の果物の順序が入れ替わります。次に、新しい最初の列の各果物について、新しい 2 番目の列にある一意のパートナー フルーツの数を を使用して数えます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))