我有一个如下所示的数据框:
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的所有值求和。
答案 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")