我想传递我的group_by变量的长度来总结。
示例数据
set.seed(112)
df <- data.frame(
groupper = factor(sample.int(n = 12, size = 100, replace = TRUE)),
var = runif(100, min = 1, max = 25)
)
现在我有不同的因素:
table(df[,1])
1 2 3 4 5 6 7 8 9 10 11 12
8 7 4 8 9 7 10 7 11 3 13 13
现在,我想在一定的时间间隔内找到每个var
中groupper
的份额。
我的代码如下所示:
results <- df %>% group_by(groupper) %>% summarise(
var0_25 = sum(var < 25 / length(groupper)),
var25_50 = sum(var >= 25 & var < 50) / length(groupper))
#etc...
)
但是,我如何在group_by(groupper)
中获得正确的summarize
长度?它因每个因素而变化。
答案 0 :(得分:3)
我们可以使用n()
来获取每组的元素数量
library(dplyr)
df %>%
group_by(groupper) %>%
summarise(var0_25 = sum(var <25)/n(),
var25_50=sum(var >=25 & var < 50 )/n())
答案 1 :(得分:3)
我认为,当您想要计算间隔时,通用解决方案是使用cut
。此代码有点长,但只需按照您的意愿调整cut
即可适用于任何数量的时间间隔。它还可以节省您手动将列名称写为等式
library(dplyr)
library(tidyr)
df %>%
mutate(indx = cut(var, c(1, 25, 50), right = FALSE)) %>%
group_by(groupper) %>%
mutate(Count = n()) %>%
group_by(groupper, indx) %>%
summarise(Res = n()/Count[1L]) %>%
spread(indx, Res)
# Source: local data frame [12 x 3]
#
# groupper [1,25) [25,50)
# 1 1 0.5000000 0.5000000
# 2 2 0.8571429 0.1428571
# 3 3 0.7500000 0.2500000
# 4 4 0.3750000 0.6250000
# 5 5 0.2222222 0.7777778
# 6 6 0.5714286 0.4285714
# 7 7 0.4000000 0.6000000
# 8 8 0.4285714 0.5714286
# 9 9 0.3636364 0.6363636
# 10 10 0.3333333 0.6666667
# 11 11 0.6153846 0.3846154
# 12 12 0.3076923 0.6923077
答案 2 :(得分:1)
但是length(.)
也有效。你的代码的问题在于var0_25
你搞砸了括号:
df %>% group_by(groupper) %>%
summarize(r = sum(var < 25) / length(groupper),
s = sum(var < 25),
l = length(groupper)) %>%
mutate(r2 = s / l)
来源:本地数据框[12 x 5]
# groupper r s l r2
# 1 1 1 8 8 1
# 2 2 1 7 7 1
# 3 3 1 4 4 1
# 4 4 1 8 8 1
# 5 5 1 9 9 1
# 6 6 1 7 7 1
# 7 7 1 10 10 1
# 8 8 1 7 7 1
# 9 9 1 11 11 1
# 10 10 1 3 3 1
# 11 11 1 13 13 1
# 12 12 1 13 13 1
我添加了列s
(总和),l
(长度)只是为了表明结果确实正确。