【发布时间】:2024-01-22 20:06:01
【问题描述】:
我正在尝试计算每个组中不同值的比例,但我不想为组创建“新”行,而是创建新列。
以上面第二个问题为例。如果我有以下数据:
data <- structure(list(value = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 3L, 3L, 3L, 3L), class = structure(c(1L, 1L, 1L,
2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L), .Label = c("A",
"B"), class = "factor")), .Names = c("value", "class"), class = "data.frame", row.names = c(NA,
-16L))
我可以计算每个值(1,2,3)在每个类(A,B)中的比例:
data %>%
group_by(value, class) %>%
summarise(n = n()) %>%
complete(class, fill = list(n = 0)) %>%
group_by(class) %>%
mutate(freq = n / sum(n))
# A tibble: 6 x 4
value class n freq
<int> <fctr> <dbl> <dbl>
1 1 A 3 0.2727273
2 1 B 3 0.6000000
3 2 A 4 0.3636364
4 2 B 2 0.4000000
5 3 A 4 0.3636364
6 3 B 0 0.0000000
但是我最终会为每个值/类对添加一行,而不是我想要这样的东西:
# some code
# A tibble: 6 x 4
class n 1 2 3
<fctr> <dbl> <dbl> <dbl> <dbl>
1 A 11 0.2727273 0.3636364 0.3636364
2 B 5 0.6000000 0.4000000 0.0000000
每个组都有一个列。我可以编写 for 循环来从旧的数据框构造一个新的数据框,但我确信有更好的方法。有什么建议吗?
谢谢
【问题讨论】:
标签: r group-by dplyr frequency