mapply r中的ifelse语句

时间:2019-05-07 09:02:00

标签: r if-statement mapply

我正在使用mapply查找所有情况下一系列索引的总和:

score = mapply(function(x, y, z) sum(df[x, y:z]), seq_len(nrow(df)), df$index, df$index+10)

我如何在mapply中添加ifelse语句,以便仅在df $ index> 5时才应用该函数,否则总和为0?

2 个答案:

答案 0 :(得分:2)

这可能应该起作用

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)

答案 1 :(得分:1)

只需包装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)