R 嵌套';ifelse'-分位数语句
我试图根据数据帧中的分位数,将一个从1到10的数字分配给一系列向量 到目前为止我已经试过了R 嵌套';ifelse'-分位数语句,r,if-statement,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 <- 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
))}
quants这应该可以:
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))
}
您应该将ifelse
条件的输出分配到它之外。即:
output <- ifelse(a > b, a, b)
输出b、a、b)
您最好使用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))
Data=Data.frame(平均值=runif(100))
量子点尝试使用常规的if语句,而不是ifelse
,因为存在大量语法错误。例如,Data$quant[1]=1
应该是1
,不需要为循环使用。我会考虑使用cut
或findInterval
。谢谢回复。我尝试了第一种解决方案。然而,我在Data$Quant中得到了纯3,即使下面的测试>Data$Avg[26]@papappa没有数据,也很难发现问题。你可能想要dput
你的数据,以便我测试它。@papappapa如果它的逻辑不按预期工作,那么你的数据中就有某种东西,或者你的算法逻辑。太棒了。非常好的解决方案,我不知道。非常感谢。我刚刚添加了数据$quant
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))