Как обозначить целочисленный столбец на основе условного оператора в R - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу пометить этот вектор C на [1] HY HY HY HY LY HY (2 уровня) или наоборот [1] LY LY LY LY HY LY (2 уровня) на основе условия, которое я указал с помощью factor.

Например,

C <- c(1, 1, 1, 1, 2, 1)

ifelse(50 > 100,
    factor(C, labels = c('HY','LY')),
    factor(C, labels = c('LY','HY')))

Это выводит [1] 1, а не мои ожидания.

Но factor(C, labels = c('LY','HY')) работает нормально. Почему это?

Тогда я сделал тест, убрав factor, но он все равно не дал мне 'LY' 'HY'.

ifelse(50 > 100,
        c('HY','LY'),
        c('LY','HY'))
[1] "LY"

Другой вариант, который я могу придумать, - это изменить вектор на символы, подобные этим, а затем изменить его на factor. В любом случае, это должно дать мне вектор, а не значение.

ifelse(50 > 100,
        ifelse(C==1, 'HY', 'LY'),
        ifelse(C==1, 'LY', 'HY'))
[1] "LY"

1 Ответ

0 голосов
/ 16 ноября 2018

Получается, что ifelse подобен циклу for, который принимает входные данные вектора и печатает вектор такой же длины, то есть 50>100 печатает FALSE длины 1 и, таким образом, в качестве выходных данных,

Когда я использую if вместо ifelse, проблема решена.

if(50>100){
     ifelse(C==1, 'HY', 'LY')
 } else {
     ifelse(C==1, 'LY', 'HY')
 }

[1] "LY" "LY" "LY" "LY" "HY" "LY"
...