我有这个数据集:
V1 V2 V3 V4 SN
[1] a t1 Q1 1 001
[2] a t1 Q2 2 001
[3] a t1 Q1 3 002
[4] a t1 Q2 4 002
[5] a t2 Q1 5 003
[6] a t2 Q2 6 003
[7] b t1 Q1 7 004
[8] b t3 Q1 8 005
[9] b t3 Q2 9 005
... .. .. .. ..
V1是客户,V2是产品类型,V3是季度,V4是经济变量的值.SN是序列号,每个产品都是唯一的,因为它们彼此不同。
我想创建一个包含以下内容的新表:
V1 V2 V5 V6 V7
[1] a t1 1+2+3+4 2 2
[2] a t2 5+6 1 2
[3] b t1 7 1 1
[4] b t3 8+9 1 2
... .. ... ... .. ..
其中V5是V4中包含的值的总和(我希望有10,而不是1 + 2 + 3 + 4); V6是同一客户拥有的同一产品的编号; V7报告了多少季度。
所以基本上我希望V4中包含的值的总和按客户和产品类型分组。
我想过一个for或一个tapply循环,但我不知道如何用R写它。
在替代方案中,我想识别具有相同V1和相同V2的行,然后将所有其他变量加在一起。
答案 0 :(得分:2)
这是一个可能的data.table
解决方案(如果您使用的是开发版本,则可以使用uniqueN()
代替length(unique())
)
library(data.table)
setDT(data)[, .(V5 = sum(V4),
V6 = length(unique(SN)),
V7 = length(unique(V3))),
by = .(V1, V2)]
# V1 V2 V5 V6 V7
# 1: a t1 10 2 2
# 2: a t2 11 1 2
# 3: b t1 7 1 1
# 4: b t3 17 1 2