dplyr条件求和

欧米莉·阿蒂亚(Omry Atia)

我有以下数据框:

set.seed(42)
df <- data_frame(x = sample(0:100, 50, replace = T), 
                 y = sample(c(T, F), 50, replace = T))

我想创建第三列z,这将是的总和x,但前提是该列true中的一行中的行数超过3 s y有矢量化的方法dplyr吗?我什至不知道该如何处理。

阿克伦

如果有3个以上的元素()并且'y'中的元素为TRUE或return,则使用rleidfrom来创建分组变量data.table并获取sum'x'n() >3if allelseNA

library(dplyr)
library(data.table)
df %>% 
  group_by(grp = rleid(y)) %>% 
  mutate(Sum = if(n() > 3 & all(y)) sum(x) else NA_integer_) %>%
  ungroup %>%
  select(-grp)

也可以用 data.table

library(data.table)
setDT(df)[,  Sum := sum(x) * NA^(!((.N > 3) & all(y))), .(grp = rleid(y))]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章