используйте оператор if else внутри применения функции в R - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть следующие 2 столбца

lower=rnorm(10,0,1)
upper=rnorm(10,1,1)

dd=data.frame(lower,upper)

Я хотел бы знать, для каждой строки, ниже <0,5 и выше> 1. Я сделал это с помощью цикла for следующим образом,

cc=c()
for(i in 1: 10 ){
  cc[i]= ifelse(  (  dd$upper[i] > 1 && dd$lower[i] < 0.5  ),1,0
  )
}

Но я хотел сделать это, используя одну из подходящих функций применения. Поскольку данные находятся во фрейме данных, я попытался использовать функцию apply. Это мой код,

apply(dd , 1, function (i,j) {ifelse( (dd$i> 0.5 && dd$j<0.5) ,0,1 )

}
  )

Я получаю АН. Это действительно полезно, если кто-то поможет мне разобраться в ошибке

Спасибо

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Ошибка в определении входов для функционального параметра FUN в apply.Думайте об этом входе как о полном массиве, а не как о отдельных элементах массива.

set.seed(10)
lower <- rnorm(10,0,1)
upper <- rnorm(10,1,1)
dd <- data.frame(lower,upper)
apply(dd, 1, FUN=function(x){ifelse(x[1] < 0.5 && x[2] > 1, 1, 0)})
[1] 1 1 0 1 1 1 0 0 1 1

Кроме того, вы также можете сделать

apply(dd , 1, FUN = function (x) {ifelse(x["lower"] < 0.5 && x["upper"] > 1, 1, 0)})
0 голосов
/ 07 сентября 2018

Я думаю, что решение ниже намного проще по сравнению с тем, что вы пробовали. Посмотрите

set.seed(10)
lower=rnorm(10,0,1)
upper=rnorm(10,1,1)

dd=data.frame(lower,upper)

dd$flag<-ifelse((dd$lower < 0.5 & dd$upper > 1),1,0)

Это даст вам необходимый вывод.

...