R 为什么使用切割函数时十分位值不正确
我尝试使用下面的代码为每个观察值附加一个十分位值。但是,这些值似乎不正确。原因是什么R 为什么使用切割函数时十分位值不正确,r,dataframe,cut,R,Dataframe,Cut,我尝试使用下面的代码为每个观察值附加一个十分位值。但是,这些值似乎不正确。原因是什么 df<-read.table(text="pregnant glucose blood skin INSULIN MASS DIAB AGE CLASS predict_probability 1 106 70 28 135 34.2 0.142 22 0 0.1531628
df<-read.table(text="pregnant glucose blood skin INSULIN MASS DIAB AGE CLASS predict_probability
1 106 70 28 135 34.2 0.142 22 0 0.15316285
1 91 54 25 100 25.2 0.234 23 0 0.05613959
4 136 70 0 0 31.2 1.182 22 1 0.54034794
9 164 78 0 0 32.8 0.148 45 1 0.64361578
3 173 78 39 185 33.8 0.970 31 1 0.79185196
11 136 84 35 130 28.3 0.260 42 1 0.31927737
0 141 84 26 0 32.4 0.433 22 0 0.41609308
3 106 72 0 0 25.8 0.207 27 0 0.10460090
9 145 80 46 130 37.9 0.637 40 1 0.67061324
10 111 70 27 0 27.5 0.141 40 1 0.16152296
",header=T)
deciles <- cut(df$predict_probability, breaks=c(quantile(df$predict_probability, probs = seq(0, 1, by = 0.10))),labels = 1:10, include.lowest=TRUE)
df1 <- cbind(df,deciles)
head(df1,10)
pregnant glucose blood skin INSULIN MASS DIAB AGE CLASS predict_probability deciles
1 1 106 70 28 135 34.2 0.142 22 0 0.15316285 3
2 1 91 54 25 100 25.2 0.234 23 0 0.05613959 1
3 4 136 70 0 0 31.2 1.182 22 1 0.54034794 7
4 9 164 78 0 0 32.8 0.148 45 1 0.64361578 8
5 3 173 78 39 185 33.8 0.970 31 1 0.79185196 10
6 11 136 84 35 130 28.3 0.260 42 1 0.31927737 5
7 0 141 84 26 0 32.4 0.433 22 0 0.41609308 6
8 3 106 72 0 0 25.8 0.207 27 0 0.10460090 2
9 9 145 80 46 130 37.9 0.637 40 1 0.67061324 9
10 10 111 70 27 0 27.5 0.141 40 1 0.16152296 4
df根据Dason的建议,以下是问题的完整答案。
分位数
函数应从代码中取出,因此seq(0,1,by=0.1)
应直接传递给切割
函数
deciles <- cut(df$predict_probability, seq(0,1,by=0.1) ,labels = 1:10, include.lowest=TRUE)
df1 <- cbind(df,deciles)
head(df1,10)
pregnant glucose blood skin INSULIN MASS DIAB AGE CLASS predict_probability deciles
1 1 106 70 28 135 34.2 0.142 22 0 0.15316285 2
2 1 91 54 25 100 25.2 0.234 23 0 0.05613959 1
3 4 136 70 0 0 31.2 1.182 22 1 0.54034794 6
4 9 164 78 0 0 32.8 0.148 45 1 0.64361578 7
5 3 173 78 39 185 33.8 0.970 31 1 0.79185196 8
6 11 136 84 35 130 28.3 0.260 42 1 0.31927737 4
7 0 141 84 26 0 32.4 0.433 22 0 0.41609308 5
8 3 106 72 0 0 25.8 0.207 27 0 0.10460090 2
9 9 145 80 46 130 37.9 0.637 40 1 0.67061324 7
10 10 111 70 27 0 27.5 0.141 40 1 0.16152296 2
十分位数当你没有得到你想要的东西时,你需要告诉我们你想要什么。代码正在执行您要求它执行的操作。您觉得哪里不对。@Dason,十分位数列的值不正确,例如:在第一行,预测概率是0.15316,但十分位数的值是3,而它应该是2。为什么您认为它应该是2@Dason,0-0.1应标记为“1”,0.1-0.2应标记为“2”。如果您查看第二行,十分位数的值是正确的:predict_概率0.0561应该按原样标记为“1”。但这不是您告诉代码要做的。如果这就是你想要的,那你为什么要使用分位数函数呢?直接将seq(0,1,by=0.1)作为breaks参数传递即可。这就是为什么我告诉你,你需要具体说明你的期望。因为你的代码完全按照你告诉它的去做——结果证明你的指令不是你想要的。