[英]ifelse statement in mapply r
我正在使用mapply查找所有情况下一系列索引的总和:
score = mapply(function(x, y, z) sum(df[x, y:z]), seq_len(nrow(df)), df$index, df$index+10)
如何将ifelse语句添加到mapply,以便仅在df $ index> 5时应用该函数,否则总和为0?
这可能应该工作
mapply(function(x, y, z) if (y > 5) sum(df[x, y:z]) else 0,
seq_len(nrow(df)), df$index, df$index+10)
或者也可以避免if
/ else
通过乘以(y > 5)
以便index > 5
将由1(相乘TRUE
),得到sum(df[x, y:z])
和index <= 5
将由0相乘( FALSE
)给出0。
mapply(function(x, y, z) sum(df[x, y:z]) * (y > 5),
seq_len(nrow(df)), df$index, df$index+10)
只是包裹ifelse
,它应该工作
mapply(function(x, y, z) ifelse(y > 5, sum(df[x, y:z]), 0),
seq_len(nrow(df)), df$index, df$index+10)
更好的选择是将小于或等于5的那些“索引”基于“索引”值预先分配为0。
i1 <- df$index > 5
score[!i1] <- 0
score[i1] <- mapply(function(x, y, z) sum(df[x, y:z]),
seq_len(nrow(df))[i1], df$index[i1], df$index[i1] + 10)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.