我正在使用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?
答案 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)