假设我有一个数据集,看起来如下:
Col1 | Col2
-----|-----
dog | red
cat | red
cat | green
dog | pink
cat | orange
我想按Col1对数据进行分组,然后有n个列与Col2中的唯一值相关。最终结果看起来像这样:
Col1 | red | green | pink | orange
-----|-----|-------|------|-------
dog | 1 | 0 | 1 | 0
cat | 1 | 1 | 0 | 1
最明显的方法是使用这里概述的方法。
df%>%
group_by(Col1)%>%
summarise( n_red = sum(Col2 == 'red'),
n_pink = sum(Col2 == 'pink'),
n_green = sum(Col2 == 'green'),
n_green = sum(Col2 == 'green'))
然而,Col2中不同值的数量足够大,因此键入上面的代码过于耗时。
如果不必为每个选项键入n_<color> = sum(Col2 == '<color>')
,一个人如何获得相同的输出
最简单/最整洁的方法可以是计算每个Col1/Col2唯一对,然后旋转:
library(tidyverse)
tribble(
~ Col1, ~ Col2,
"dog", "red",
"cat", "red",
"cat", "green",
"dog", "pink",
"cat", "orange"
) |>
count(Col1, Col2) |>
pivot_wider(names_from = Col2, values_from = n, values_fill = 0)
#> # A tibble: 2 × 5
#> Col1 green orange red pink
#> <chr> <int> <int> <int> <int>
#> 1 cat 1 1 1 0
#> 2 dog 0 0 1 1