R:有条件地对行进行子集化

时间:2015-06-03 17:01:31

标签: r

我需要根据" 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   ... ... ... ...

1 个答案:

答案 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相加。