我有一个包含大量变量的数据框架,其中一个变量是所有其他变量预测的死亡概率。作为初步步骤,我想通过计算每个变量的死亡率来计算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计算为一组的死亡率,即死亡滞后数除以该组的人数,或者简单地计算为平均死亡滞后。当按重量分组时(比如低于和高于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的新列。
非常感谢您的帮助!
您的循环不起作用,因为一个字符被解析为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))