r-有条件地计算列中的所有值,而不显式列出值

  • 本文关键字:有条件 计算 r dplyr
  • 更新时间 :
  • 英文 :


假设我有一个数据集,看起来如下:

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

最新更新