我试图根据数据帧中的分位数,将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
))}
我得到以下错误:
有人能发现我在这里犯的错误吗?
答案 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))