2016-09-13 2 views
0

Я пытаюсь присвоить число от 1 до 10 ряду векторов, основанных на том, какой квантиль они находятся в кадре данных.Вложенное выражение ifelse для квантилей

До сих пор я пытался

quants <- quantile(Data$Avg, c(.1, .2, .3, .4, .5, .6, .7, .8, .9)) 

Data$quant <- for (i in nrow(Data)) { 
    ifelse(Data$Avg [i] < quants[1], Data$quant[1] = 1 , 
     ifelse(Data$Avg [i] > quants[1] & Data$Avg[i] < quants[2], Data$quant[1] = 2, Data$quant = 3 
        ))} 

я получаю следующую ошибку:

enter image description here

Может кто-нибудь запятнать ошибку, которую я делаю здесь?

+0

Попробуйте использовать обычный, если оператор вместо 'ifelse' –

+0

Есть куча ошибок синтаксиса. Например, 'Data $ quant [1] = 1' должно быть' 1', а использование цикла 'for' не требуется. Я бы рассмотрел использование 'cut' или' findInterval'. – lmo

ответ

1

Вы могли бы быть лучше использовать cut вместо цикла:

Data = data.frame(Avg = runif(100)) 
quantpoints <- seq(0.1, 0.9, 0.1) 
quants <- quantile(Data$Avg, quantpoints) 

cutpoints <- c(-Inf, quants, Inf) 

cut(Data$Avg, breaks = cutpoints, labels = seq(1, length(cutpoints) - 1)) 
+0

Фантастический. Очень приятное решение, о котором я не знал. Спасибо. Я просто добавил 'Data $ quant <- cut (Data $ Avg, breaks = cutpoints, labels = seq (1, length (cutpoints) - 1))', чтобы присвоить значения вектору, как я просил выше – pApaAPPApapapa

1

Это должно работать:

Data$quant <- for (i in nrow(Data)) { 
    Data$quant[1] <- ifelse(Data$Avg [i] < quants[1], 1, ifelse(Data$Avg [i] > quants[1] & Data$Avg[i] < quants[2], 2, 3)) 
} 

или, что эквивалентно (внутри цикла for):

if(Data$Avg [i] < quants[1]) 
    Data$quant[1] <- 1 
else{ 
    if(Data$Avg [i] > quants[1] & Data$Avg[i] < quants[2]) 
     Data$quant[1] <- 2 
    else 
     Data$quant[1] <- 3 
} 

Вы должны назначить выход ifelse условий вне его. То есть:

output <- ifelse(a > b, a, b) 
+0

Спасибо за ответ. Я попытался попробовать первое решение. Тем не менее, я получаю чистые 3 в Data $ Quant, хотя следующий тест '> Data $ Avg [26] pApaAPPApapapa

+0

@pApaAPPApapapa без данных, его трудно найти проблему. Вы можете захотеть «dput» ваши данные, чтобы я мог его протестировать. – 989

+0

@pApaAPPApapapa Если его логика не работает должным образом, есть что-то в ваших данных, я бы сказал, или ваша алгоритмическая логика. – 989

Смежные вопросы