R在行之间找到行和

时间:2017-01-11 21:51:14

标签: r

我有一个如下所示的数据框:

Type  Value
 0     0
 0     0
 1     0
 2     50
 2     20
 0     0
 2     20
 2     10
 1     0

我希望总结如下

Type  Value
 0     0
 0     0
 1     0
 0     70
 1     30

基本上在类型中的0或1之间,我希望总结所有Type == 2的值并将其粘贴到出现的后续0或1中。 有关如何实现这一点的任何指示? 我尝试了聚合,但它根据列名称汇总了所有值。 谢谢! 编辑: 求和模式:基本上我需要在类型0或1之间对类型2的所有值求和。

1 个答案:

答案 0 :(得分:2)

使用data.table或类似的软件包可能更容易做到这一点。试试这个

library(data.table)  #data.table 1.9.8
setDT(dat)
# Generate a consecutive grouping variable on the basis of a cumulative
# count of values that are *not* equal to 2. This has to be done in reverse
# so the right cases are grouped together.
dat[,grp := rev(cumsum(rev(Type!=2)))]

#   Type Value grp
#1:    0     0   5
#2:    0     0   4
#3:    1     0   3
#4:    2    50   2
#5:    2    20   2
#6:    0     0   2
#7:    2    20   1
#8:    2    10   1
#9:    1     0   1

# Then take the last Type in each group, along with the sum of Value 
dat[, .(Type=last(Type), Value=sum(Value)), by=grp][,-1]

#   Type Value
#1:    0     0
#2:    0     0
#3:    1     0
#4:    0    70
#5:    1    30

dat是:

dat <- structure(list(Type = c(0L, 0L, 1L, 2L, 2L, 0L, 2L, 2L, 1L), 
    Value = c(0L, 0L, 0L, 50L, 20L, 0L, 20L, 10L, 0L)), .Names = c("Type", 
"Value"), row.names = c(NA, -9L), class = "data.frame")