计算因子变量的计数总和,作为 R 中数据帧的子集

Calculate the sum of the counts of a factor variable, as a subset of a dataframe in R

我想总结一下我的数据中有多少人接受过手术然后死去;计算手术患者的死亡率。

我的数据是这样的

df <- data.frame(
y1988 = rep(c('Y', 'Y', 'Y', 'M', 'D', 'Y', 'Y', 'D', 'X', 'D'), 25),
y1989 = rep(c('Y', 'M', 'D', 'Y', 'X', 'Y', 'X', 'Y', 'Y', 'Y'), 25),
y1990 = rep(c('D', 'Y', 'D', 'X', 'Y', 'M', 'D', 'Y', 'Y', 'Y'), 25),
y1991 = rep(c('D', 'Y', 'Y', 'M', 'D', 'Y', 'Y', 'X', 'D', 'Y'), 25),
age = rep(20:69, 5),
ID = (1:250)
)

我想要做的是求出 'D' 的总和,然后将其除以每年年龄(y1988 到 y1991)的 'Y' 的数目。

如果我手动执行此操作,我会为每个年龄段的数据帧子集,然后将 'D' 的总和除以 'Y' 的总和,例如

a21 <- filter(df, age == 21)
a21$mort1988 <- sum(a21$y1988 == 'D') / sum(a21$y1988 == 'Y')
a21$mort1989 <- sum(a21$y1989 == 'D') / sum(a21$y1989 == 'Y')

等等

这似乎很荒谬,有没有有效的方法来做到这一点?

我们可以使用 summarise_at 在按 'age'

分组后对每个 yYear 列进行除法
df %>% 
    group_by(age) %>% 
    summarise_at(vars(matches("y\d{4}")), funs(sum(.=="D")/sum(.=="Y")))