使用 group_by 自定义函数时出错并在 r 中的 dplyr 中汇总

问题描述 投票:0回答:1

我尝试使用 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,就可以了。

但是我的实际数据在不同组中具有不同的值,如何解决这个问题?

r function dplyr custom-function
1个回答
0
投票

我认为您想将对 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
© www.soinside.com 2019 - 2024. All rights reserved.