我正在尝试使用 dplyr
函数 group_by()
和 summarize()
, count()
但是我想不通怎么办:
每种颜色分配给每个 id 的数量是多少?即:id = 2 有 1 个 b 和 1 个 r。 id 3 只有 1 个 r ,...
df = data.frame(color = c("b","r","r","g","y","y","r"), id = c(2,3,2,6,4,4,7))
df %>%
group_by(id) %>%
summarize(count = n_distinct(color))
有没有明确的方法可以做到这一点?我会考虑创建假人,但我的真实数据集非常大,然后我想知道是否有一种简洁、漂亮的编码风格。感谢您的任何建议。
输出:
color id_2 id_3 id_4 id_6 id_7
1 b 1 0 0 0 0
2 g 0 0 0 1 0
3 r 1 1 0 0 1
4 y 0 0 2 0 0
最佳答案
您只是在寻找:
df %>%
group_by(id) %>%
count(color)
?
# A tibble: 6 x 3
# Groups: id [5]
id color n
<dbl> <chr> <int>
1 2 b 1
2 2 r 1
3 3 r 1
4 4 y 2
5 6 g 1
6 7 r 1
或者,如果您希望将 ID 作为列:
df %>%
group_by(id) %>%
count(color) %>%
pivot_wider(names_from = id,
names_prefix = 'id_',
values_from = n,
values_fill = 0) %>%
arrange(color)
# A tibble: 4 x 6
color id_2 id_3 id_4 id_6 id_7
<chr> <int> <int> <int> <int> <int>
1 b 1 0 0 0 0
2 g 0 0 0 1 0
3 r 1 1 0 0 1
4 y 0 0 2 0 0
关于r - 一列中的每个不同项目中有多少分配给另一列中的每个不同项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71609900/