dplyr:将计数出现次数放入新变量中[重复]

2024-04-17

想要了解 dplyr 代码,但无法弄清楚这一点。已经看到这里描述的许多变量的类似问题(用 dplyr 总结一个因子的计数 https://stackoverflow.com/questions/25811756/summarizing-counts-of-a-factor-with-dplyr and 将值出现的行计数放入新变量中,如何在 R 中使用 dplyr 做到这一点? https://stackoverflow.com/questions/23838322/putting-rowwise-counts-of-value-occurences-into-new-variables-how-to-do-that-in),但是我的任务有点小。
给定一个数据框,如何计算变量的频率并将其放入新变量中。

set.seed(9)
df <- data.frame(
    group=c(rep(1,5), rep(2,5)),
    var1=round(runif(10,1,3),0))

然后我们有:

>df
   group var1
1      1    1
2      1    1
3      1    1
4      1    1
5      1    2
6      2    1
7      2    2
8      2    2
9      2    2
10     2    3

想要第三列指示每组(group) 多少次var1发生时,在本例中为:count=(4,4,4,4,1,1,3,3,3,1)。 我尝试过 - 但没有成功 - 类似的事情:

df %>%  group_by(group) %>% rowwise() %>% do(count = nrow(.$var1))

非常感谢解释!


您需要做的就是按“group”和“var1”两列对数据进行分组:

df %>% group_by(group, var1) %>% mutate(count = n())
#Source: local data frame [10 x 3]
#Groups: group, var1
#
#   group var1 count
#1      1    1     4
#2      1    1     4
#3      1    1     4
#4      1    1     4
#5      1    2     1
#6      2    1     1
#7      2    2     3
#8      2    2     3
#9      2    2     3
#10     2    3     1

评论后编辑

以下是您不应该这样做的示例:

df %>% group_by(group, var1) %>% do(data.frame(., count = length(.$group)))

dplyr 的实现n()肯定更快、更干净、更短,并且应该始终优于上述实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dplyr:将计数出现次数放入新变量中[重复] 的相关文章

随机推荐