Nested 'ifelse'-statement for quantiles

后端 未结 2 1779
后悔当初
后悔当初 2021-01-26 05:37

I am attempting to assign a number from 1 through 10 to a series of vectors based on what quantile they\'re in in a dataframe.

So far I have tried

quants         


        
相关标签:
2条回答
  • 2021-01-26 06:07

    You might be better off using cut rather than a loop:

    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 讨论(0)
  • 2021-01-26 06:08

    This should work:

    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))
    }
    

    Or equivalently (inside the for loop):

    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
    }
    

    You should assign the output of ifelse conditions outside of it. That is:

    output <- ifelse(a > b, a, b)
    
    0 讨论(0)
提交回复
热议问题