我尝试使用 dplyr::group_by 编写自定义函数并进行总结。
但总是出错,“row.names”长度。
我简化了数据和代码,找到了原因。这是数据和代码:
set.seed(123)
df = data.frame(
Group = c("A","A","A","A","A","B","B","B","B","B", "B"),
Con = runif(11, min = 10, max = 60),
YN = rbinom(11, 1, 0.5)
)
cf = function(x, y){
df %>%
group_by(Group) %>%
summarise(median = median(x),
n = n(),
YN_n = sum(y),
YN_perc = sum(y)/n()*100,
CI = binom.confint(sum(y), n(),
conf.level = 0.95, methods = "exact"))
}
cf(df$Con, df$YN)
我发现这个错误是由于A组和B组的长度不同造成的。 如果我将组更改为 5 A 和 5 B,就可以了。
但是我的实际数据在不同组中具有不同的值,如何解决这个问题?
我认为您想将对 binom.conf 的调用放在
mutate
中,并将 .groups="drop"
添加到汇总函数中。我还向该函数添加了一个数据参数。
cf = function(data, x, y){
data %>%
group_by(Group) %>%
summarise(median = median({{x}}),
n = n(),
YN_n = sum({{y}}),
YN_perc = YN_n/n*100, .groups="drop") %>%
mutate(CI = binom.confint(YN_n, n, conf.level = 0.95, methods = "exact"))
}
cf(df, Con, YN)
Group median n YN_n YN_perc CI$method $x $n $mean $lower $upper
<chr> <dbl> <int> <int> <dbl> <chr> <int> <int> <dbl> <dbl> <dbl>
1 A 49.4 5 3 60 exact 3 5 0.6 0.147 0.947
2 B 37.0 6 3 50 exact 3 6 0.5 0.118 0.882