我需要根据" Flag"按行对数据进行子集化。变量。也就是说,在下面的例子中,如果flag == 1后跟三个或任何0,那么汇总M1和M2的三行,其中flag == 0.我希望在G1 + G2内这样的事件的数量会有所不同。每个都需要一个摘要。
这样的子集和汇总是否可以通过聚合或它的变量等函数来完成,或者必须用循环编码,明确索引每个元素?任何提示都会非常感激。
G1 G2 G3 Flag M1 M2
10 1 0 0 0 5336.682
10 1 0 1 1 1871.782
10 1 0 0 0 3330.898
10 1 0 0 0 763.134
10 1 0 0 1 1183.485
10 1 0 0 1 385.664
10 1 0 0 1 372.036
10 1 0 1 1 329.601
10 1 1 1 0 281.965
10 1 1 0 0 377.866
10 1 1 0 0 328.342
10 1 1 0 0 512.528
10 1 1 1 0 777.216
10 1 1 0 0 409.559
10 1 1 1 0 417.606
10 1 1 1 0 673.728
10 1 1 0 0 1090.082
10 1 1 0 0 345.481
10 1 1 0 0 329.294
10 2 ... ... ... ...
11 1 ... ... ... ...
... ... ... ... ... ...
11 2 ... ... ... ...
答案 0 :(得分:2)
您可以使用data.table。首先,将您的数据放入名为'df'的数据框中。然后,运行
dt <- data.table(df)
dt[, group := cumsum(Flag)]
dt[, list(M1 = sum(M1[-1]), M2 = sum(M2[-1])), by = "group"]
您没有指定太阳需要哪个摘要,所以我们只是将M1和M2相加。