gpt4 book ai didi

r - 如何添加具有 NA 的行作为 R 中的先前列?

转载 作者:行者123 更新时间:2023-12-04 10:58:30 24 4
gpt4 key购买 nike

全部,

我有一个数据框,第一列是日期,类别是这样的:

Accounts <- c('A','B','C','D',
'A','B','C','D',
'A','B','C','D')
Dates <- as.Date(c('2016-01-31', '2016-01-31','2016-01-31','2016-01-31',
'2016-02-28','2016-02-28','2016-02-28','2016-02-28',
'2016-03-31','2016-03-31','2016-03-31','2016-03-31'))
Balances <- c(100,NA,NA,NA,
90,50,10,NA,
80,40,5,120)
Origination <- data.frame(Dates,Accounts,Balances)

library(reshape2)
Origination <- dcast(Origination,Dates ~ Accounts, value.var = "Balances")

Dates A B C D
1 2016-01-31 100 NA NA NA
2 2016-02-28 90 50 10 NA
3 2016-03-31 80 40 5 120

目标是对先验值为 NA 的行求和。我尝试使用 lag 或 shift,但不知道如何实现它。

所以对于这个数据框,我希望在末尾有一个总计列,它的值是 60 (50 + 10),二月和三月的值是 120。

这可行吗?

问候,阿克塞尔

最佳答案

将选择向下移动一行,过滤掉所有非 NA 的为 0,然后使用 rowSums:

sel <- rbind(FALSE, !is.na(head(Origination[-1], -1)))
#sel
# A B C D
#[1,] FALSE FALSE FALSE FALSE
#[2,] TRUE FALSE FALSE FALSE
#[3,] TRUE TRUE TRUE FALSE

rowSums(replace(Origination[-1], sel, 0), na.rm=TRUE)
#[1] 100 60 120

如果你想完全排除第一行,而不是完全包含,只需将 FALSE 更改为 TRUE:

sel <- rbind(TRUE, !is.na(head(Origination[-1], -1)))
rowSums(replace(Origination[-1], sel, 0), na.rm=TRUE)
#[1] 0 60 120

关于r - 如何添加具有 NA 的行作为 R 中的先前列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49394717/

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