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参数传递即可。这就是为什么我告诉你,你需要具体说明你的期望。因为你的代码完全按照你告诉它的去做——结果证明你的指令不是你想要的。