我有以下数据框:
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,则使用rleid
from来创建分组变量data.table
并获取sum
'x'n() >3
if
all
else
NA
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] 删除。
我来说两句