嵌套' ifelse' - 分位数的陈述

时间:2016-09-13 12:10:19

标签: r if-statement

我试图根据数据帧中的分位数,将1到10之间的数字分配给一系列向量。

到目前为止,我已经尝试了

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

有人能发现我在这里犯的错误吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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))
相关问题