如何使用R中的for循环在列内求和

时间:2015-09-16 10:27:50

标签: r for-loop dataset

我有这个数据集:

        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的行,然后将所有其他变量加在一起。

1 个答案:

答案 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