向数据框的列中的元素添加值

时间:2018-10-12 11:32:48

标签: r dplyr

我有以下data.frame:

df<-structure(list(Ns.infection = c(0, 0, 0, 1, 1, 2, 1, 1, 6, 18, 
    27, 45, 75, 92, 101, 115, 4, 10, 13, 20, 21, 24, 28, 34, 42, 
    45), Bs.infection = c(0, 0, 1, 2, 4, 10, 4, 13, 25, 43, 71, 97, 
    124, 151, 183, 203, 14, 20, 26, 40, 48, 56, 67, 75, 83, 92), 
        Es.infection = c(0, 0, 0, 0, 0, 0, 3, 6, 13, 21, 31, 41, 
        54, 69, 80, 93, 4, 6, 8, 9, 15, 18, 23, 24, 26, 29), totinfectionscenario = c(0, 0, 1, 3, 5, 12, 8, 20, 44, 82, 129, 183, 253, 312, 364, 411,22, 36, 47, 69, 84, 98, 118, 133, 151, 166), t = 0:25), row.names = c(NA, -26L), class = c("tbl_df", "tbl", "data.frame"))

我需要将每列第6行中的值添加到同一列中7:16行中的元素。例如,列totinfectionscenario应该看起来(在totinfectionscenario [6]中添加12之后:

totinfectionscenario = c(0, 
        0, 1, 3, 5, 12, 20, 32, 56, 94, 141, 195, 265, 324, 376, 423, 
        22, 36, 47, 69, 84, 98, 118, 133, 151, 166)

我需要使它成为一个函数,因为我必须使用数据帧列表来做到这一点。欢迎使用dplyr版本。谢谢

1 个答案:

答案 0 :(得分:2)

res   <- df
res[] <- lapply(res, function(x) {x[7:16] <- x[7:16] + x[6]; return(x)})

在您的示例中,您将element 6添加到elements 7:16

由于您要针对“每一列”执行此操作,因此我将使用lapply针对每一列进行此操作。


您当然可以直接使用df,而无需使用res


如果有数据框列表。您可以执行以下操作:

listOfDataFrames <- list(df,df,df)

listOfDataFrames2 <- lapply(listOfDataFrames, function(DF){ DF[] <- lapply(DF, function(x) {x[7:16] <- x[7:16] + x[6]; return(x)}); return(DF)})