заявление ifelse в mapply r - PullRequest
       7

заявление ifelse в mapply r

1 голос
/ 07 мая 2019

Я использую 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?

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

Это, вероятно, должно работать

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 (* 1011) *) давая 0.

mapply(function(x, y, z) sum(df[x, y:z]) * (y > 5), 
        seq_len(nrow(df)), df$index, df$index+10)
1 голос
/ 07 мая 2019

Просто оберните ifelse, и оно должно работать

mapply(function(x, y, z) ifelse(y > 5, sum(df[x, y:z]), 0), 
             seq_len(nrow(df)), df$index, df$index+10)

Лучшим вариантом будет предварительное назначение на основе значения 'index' для 0 для тех 'index', которые меньше чемили равно 5. Должно быть более эффективным

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...