繁体   English   中英

mapply r中的ifelse语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM