【问题标题】:What is the simplest way to compute the average of one variable grouped by a second variable, iterating over all second variables dplyr?计算由第二个变量分组的一个变量的平均值的最简单方法是什么,迭代所有第二个变量 dplyr?
【发布时间】:2022-08-16 21:11:07
【问题描述】:

我有一个包含大量变量的数据框,其中一个是所有其他变量都可以预测的死亡概率。 作为初步步骤,我想通过计算每个变量的死亡率来计算 PoD。

假设df <- (age = c(25, 57, 60), weight = (80, 92, 61), cigarettes_a_day = c(30, 2, 19), death_flag=c(1,0,1))

然后我可以按年龄分组(比如 50 岁以下和 50 岁以上),并将 PoD 计算为一组的死亡率,即 death_flags 的计数除以该组的人数,或者简单地说是平均 death_flag。当按重量分组时(比如低于和高于 80),对于每个分箱变量,我将获得不同的死亡率,从而获得不同的 PoD,这就是我想要的。尝试遍历所有变量时出现了我的问题。

到目前为止,我已经尝试了以下代码的变体,但是它不起作用:

for(n in names(df)) {

    df%>% group_by(n)%>%
      summarise(PoD_bin = mean(death_flag))
}

我还没有想出一种方法来遍历所有变量并执行计算。

作为旁注,我在没有 dplyr 的情况下完成的变量合并:

for(v in names(df[-1])){
    newVar <- paste(f, \"bin\", sep = \"_\")
    df[newVar] <- cut(as.matrix(df[v]), breaks = 100)
}

我很恼火,因为我不能在第一个 for 循环中引用变量来进行分组,而我可以在第二个循环中这样做来创建 df 的新列。

非常感谢您的帮助!

  • 你的样本df 应该是data.frame(.) 吗?此外,(80,92,61) 应该是c(80,92,61)。请测试您提供给我们的代码。
  • 你需要dplyr::across()。关于 So 有很多很多问题,这将向您展示如何进行。

标签: r loops dplyr dynamic-variables


【解决方案1】:

您的循环不起作用,因为一个字符被解析为group_by。您可以稍微修改您的循环并获得所需的结果。我添加了print() 来查看输出。

for (n in names(df)) {
  
  df |>
    group_by(!!sym(n)) |>
    summarise(PoD_bin = mean(death_flag)) |>
    print()
  
}

输出:

# A tibble: 3 × 2
    age PoD_bin
  <dbl>   <dbl>
1    25       1
2    57       0
3    60       1
# A tibble: 3 × 2
  weight PoD_bin
   <dbl>   <dbl>
1     61       1
2     80       1
3     92       0
# A tibble: 3 × 2
  cigarettes_a_day PoD_bin
             <dbl>   <dbl>
1                2       0
2               19       1
3               30       1
# A tibble: 2 × 2
  death_flag PoD_bin
       <dbl>   <dbl>
1          0       0
2          1       1

数据:

df <- tibble(age = c(25, 57, 60), weight = c(80, 92, 61), cigarettes_a_day = c(30, 2, 19), death_flag=c(1,0,1))

【讨论】:

    猜你喜欢
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多