首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mapply r中的ifelse语句

mapply r中的ifelse语句
EN

Stack Overflow用户
提问于 2019-05-07 09:01:59
回答 2查看 252关注 0票数 1

我正在使用来查找所有情况下一系列指数的总和:

代码语言:javascript
复制
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?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-07 09:04:06

这应该能行

代码语言:javascript
复制
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。

代码语言:javascript
复制
mapply(function(x, y, z) sum(df[x, y:z]) * (y > 5), 
        seq_len(nrow(df)), df$index, df$index+10)
票数 3
EN

Stack Overflow用户

发布于 2019-05-07 09:04:47

只需包装ifelse,它就能工作了

代码语言:javascript
复制
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。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56019046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档