gpt4 book ai didi

r - 简化遍历列的多个 rowSums

转载 作者:行者123 更新时间:2023-12-02 08:09:00 25 4
gpt4 key购买 nike

我目前正在使用 R 尝试为 DF 创建具有前一列总和的多列。想象一下我有一个这样的 DF:

df=    
sep-2016 oct-2016 nov-2016 dec-2016 jan-2017
1 70 153 NA 28 19
2 57 68 73 118 16
3 29 NA 19 32 36
4 177 36 3 54 53

我想在末尾添加我要报告的月份的前几行的总和,因此对于 10 月份,您最终得到 sep 和 oct 的总和,而对于 11 月,您最终得到 sep 的总和, 10 月和 11 月,最后得到这样的结果:

 df=    
sep-2016 oct-2016 nov-2016 dec-2016 jan-2017 status-Oct2016 status-Nov 2016
1 70 153 NA 28 19 223 223
2 57 68 73 118 16 105 198
3 29 NA 19 32 36 29 48
4 177 36 3 54 53 213 93

我想知道一种有效的方法,而不是编写大量的 rowSums() 行,即使我能在每个月的迭代中获得标签,那也太棒了!

谢谢!

最佳答案

我们可以使用 lapply 循环遍历列以应用 rowSums

dat2 <- as.data.frame(lapply(2:ncol(dat), function(i){
rowSums(dat[, 1:i], na.rm = TRUE)
}))

names(dat2) <- paste0("status-", names(dat[, -1]))

dat3 <- cbind(dat, dat2)

dat3
# sep-2016 oct-2016 nov-2016 dec-2016 jan-2017 status-oct-2016 status-nov-2016 status-dec-2016 status-jan-2017
# 1 70 153 NA 28 19 223 223 251 270
# 2 57 68 73 118 16 125 198 316 332
# 3 29 NA 19 32 36 29 48 80 116
# 4 177 36 3 54 53 213 216 270 323

数据

dat <- read.table(text = "   'sep-2016'  'oct-2016'    'nov-2016'  'dec-2016'   'jan-2017'
1 70 153 NA 28 19
2 57 68 73 118 16
3 29 NA 19 32 36
4 177 36 3 54 53",
header = TRUE, stringsAsFactors = FALSE)

names(dat) <- c("sep-2016", "oct-2016", "nov-2016", "dec-2016", "jan-2017")

关于r - 简化遍历列的多个 rowSums,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48834746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com