我需要R和下面的数据方面的帮助。对于每个日期,都有一个值(A列),我需要计算Balance列,它总计减去A列中每行的值.406是A列的总和。
我目前在data.table中有这些数据。
Dates A Balance
406.00
30/12/2016 100.00 306.00
31/03/2017 101.00 205.00
30/06/2017 102.00 103.00
29/09/2017 103.00 -
由于
答案 0 :(得分:1)
您可以使用循环并手动执行计算,不包括最后一行。
data <- data.frame(A = c(NA, 100, 101, 102, 103), Balance = c(406, NA, NA, NA, NA))
for (i in 1:(nrow(data) - 1)) {
data$Balance[i + 1] <- data$Balance[i] - data$A[i + 1]
}
答案 1 :(得分:1)
data$Balance <- sum(data$A)-data$A
您可以通过将所有A相加然后用矢量A减去来创建平衡columb。
答案 2 :(得分:0)
这应该可以获得所需的结果
# Create dataframe
df <- data.frame(Dates = c("30/12/2016","31/03/2017","30/06/2017","29/09/2017"),
A = c(100.00, 101.00, 102.00, 103.00))
# Create empty Balance column
df$Balance <- NA
# Insert total balance to top of dataframe
df <- rbind(c(NA,0,sum(df$A)), df)
# Get the running balance
df$Balance <- sum(df$A) - cumsum(df$A)
答案 3 :(得分:0)
我想指出函数cumsum
是为此做的。反转数据帧后......:
df <- df[seq( nrow(df), 1 ),]
df
Dates A Balance
<chr> <dbl> <chr>
1 29/09/2017 103 -
2 30/06/2017 102 103.00
3 31/03/2017 101 205.00
4 30/12/2016 100 306.00
5 <NA> NA 406.00
cumsum(df$A)
[1] 103 205 306 406 NA