怎么用最简便的方法
在保留treatment列的情况下,
把hypertension和headache列分别除以sampleSize算出比值
并把新生成的比值的列名换成hypertension和headache?
现在只是计算两列,如果后面有十几列需要进行同样的计算呢?

z <- data.frame(treatment=letters[1:13],
                samplesize=sample(c(30:50),size=13,replace=T),
                hypertension=c(rep(20,10),rep(NA,3)),
                headache=c(rep(10,7),NA,NA,13,11,15,12))

已解决。

for (i in c(2:3)) {
  label <- colnames(z[i])
  rate <- rate %>% mutate(z[i]/samplesize)
  rm(label)
  }

across()的语法也可以解决

library(dplyr)

z <- data.frame(treatment=letters[1:13],
                samplesize=sample(c(30:50),size=13,replace=T),
                hypertension=c(rep(20,10),rep(NA,3)),
                headache=c(rep(10,7),NA,NA,13,11,15,12))

z %>% mutate(across(c(hypertension, headache), ~ .x / samplesize))

    如果需要计算的列数多的话,可以把meeeeeeeeoacross里的c(hypertension, headache)替换成3 : last_col()(假设前两列不需要变换)。

    不过 dapengde 的解法真的很简洁。

    7 天 后

    习惯了data.table,计算方法如下:

    library(data.table)
    cols = c('hypertension', 'headache')
    setDT(z)[, (cols) := lapply(.SD, function(x) x/samplesize), .SDcols = cols][]