我在R中有以下数据表:
n s b y
1 a 1Q 1990 Rank1 10
2 a 2Q 1990 Rank1 43
3 b 1Q 1991 Rank2 42
4 b 3Q 2000 Rank3 66
5 a 4Q 1991 Rank1 55
6 c 1Q 2005 rank3 44
我想根据其余列的值来总结y列。例如,在列n值“a”中,在列s值“Rank1”中。需要注意的是,我想在最初的一个之后总结每个季度的所有数字,而不是在它之前的其他数字。对于1990年第一季度,我希望在1990年第一季度之后添加所有其他数字,直到2005年第一季度,1990年第二季度,我希望将所有数字添加到2005年第一季度,而不是1990年第一季度。
所以最后的结果应该是这样的:
n s b y
1 a 1Q 1990 Rank1 108
2 a 2Q 1990 Rank1 98
3 b 1Q 1991 Rank2 42
4 b 3Q 2000 Rank3 66
5 a 4Q 1991 Rank1 55
6 c 1Q 2005 rank3 44
我甚至不知道如何开始构建它。
非常感谢每一点帮助。
由于
答案 0 :(得分:0)
以下是data.table
的解决方案:
library("data.table")
DT <- fread(
"n s b y
a 1Q.1990 Rank1 10
a 2Q.1990 Rank1 43
b 1Q.1991 Rank2 42
b 3Q.2000 Rank3 66
a 4Q.1991 Rank1 55
c 1Q.2005 rank3 44")
DT[, ysum:=rev(cumsum(rev(y))), by=.(n, b)][]
# > DT[, ysum:=rev(cumsum(rev(y))), by=.(n, b)][]
# n s b y ysum
# 1: a 1Q.1990 Rank1 10 108
# 2: a 2Q.1990 Rank1 43 98
# 3: b 1Q.1991 Rank2 42 42
# 4: b 3Q.2000 Rank3 66 66
# 5: a 4Q.1991 Rank1 55 55
# 6: c 1Q.2005 rank3 44 44
使用基座R
,您可以执行以下操作:
DT$ysum2 <- ave(DT$y, DT$n, DT$b, FUN=function(x) rev(cumsum(rev(x))))
答案 1 :(得分:-1)
您可以使用“sqldf”包在数据帧上执行SQL查询。 在此之前,将复合列“a”拆分为单个值,以便您可以更轻松地处理它们。
https://www.rdocumentation.org/packages/sqldf/versions/0.4-11