首页 文章

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

提问于
浏览
0

我需要根据“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 回答

  • 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 .

相关问题