我正在使用来查找所有情况下一系列指数的总和:
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?
发布于 2019-05-07 09:04:06
这应该能行
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)发布于 2019-05-07 09:04:47
只需包装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的“索引”,一个更好的选项是根据“index”值预先赋值为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)https://stackoverflow.com/questions/56019046
复制相似问题