Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据R中的百分比分配数字?_R - Fatal编程技术网

如何根据R中的百分比分配数字?

如何根据R中的百分比分配数字?,r,R,我在数据框中有这个列,df: 10 12 75 89 25 100 67 89 4 67 120.2 140.5 170.5 78.1 我正在努力 计算df范围的10%、20%、30%、90%百分位值 根据值所属的百分位数指定1-10的值。(例如,如果10在df的20%-30%百分位范围内,我将分配一个存储在不同列中的值2 基本上,我试图创建这样的输出(这些值是粗略的估计,而不是基于实际的百分位数) 我不知道如何创建这些百分位数和赋值 到目前为止,我只能做到这一点 quantile(df, c

我在数据框中有这个列,df:

10
12
75
89
25
100
67
89
4
67
120.2
140.5
170.5
78.1
我正在努力

  • 计算df范围的10%、20%、30%、90%百分位值
  • 根据值所属的百分位数指定1-10的值。(例如,如果10在df的20%-30%百分位范围内,我将分配一个存储在不同列中的值2
  • 基本上,我试图创建这样的输出(这些值是粗略的估计,而不是基于实际的百分位数)

    我不知道如何创建这些百分位数和赋值

    到目前为止,我只能做到这一点

    quantile(df, c(.1, .2,.3,.4,.5,.6,.7,.8,.9)) 
    
    你能帮忙吗


    谢谢

    根据您的示例,您是如何计算休息时间的,这有点不清楚,但根据您的描述,这应该是可行的

    x<-c(10, 12, 75, 89, 25, 100, 67, 89, 4, 67, 120.2, 140.5, 170.5, 78.1)
    qq<-cut(x, breaks=seq(min(x),max(x), length.out=11), include.lowest=T, labels=F)
    
    然后我们只需使用带有这些中断的
    cut
    命令来创建要获取的新ID

     # cbind(x, qq)
              x qq
     [1,]  10.0  1
     [2,]  12.0  1
     [3,]  75.0  5
     [4,]  89.0  6
     [5,]  25.0  2
     [6,] 100.0  6
     [7,]  67.0  4
     [8,]  89.0  6
     [9,]   4.0  1
    [10,]  67.0  4
    [11,] 120.2  7
    [12,] 140.5  9
    [13,] 170.5 10
    [14,]  78.1  5
    
    如果你真的想用分位数,你可以用

    qq<-cut(x, breaks=quantile(x, seq(0,1, length.out=11)), include.lowest=T, labels=F) 
    

    有点不清楚你是如何根据你的例子计算你的休息时间的,但是从你的描述来看,这应该是可行的

    x<-c(10, 12, 75, 89, 25, 100, 67, 89, 4, 67, 120.2, 140.5, 170.5, 78.1)
    qq<-cut(x, breaks=seq(min(x),max(x), length.out=11), include.lowest=T, labels=F)
    
    然后我们只需使用带有这些中断的
    cut
    命令来创建要获取的新ID

     # cbind(x, qq)
              x qq
     [1,]  10.0  1
     [2,]  12.0  1
     [3,]  75.0  5
     [4,]  89.0  6
     [5,]  25.0  2
     [6,] 100.0  6
     [7,]  67.0  4
     [8,]  89.0  6
     [9,]   4.0  1
    [10,]  67.0  4
    [11,] 120.2  7
    [12,] 140.5  9
    [13,] 170.5 10
    [14,]  78.1  5
    
    如果你真的想用分位数,你可以用

    qq<-cut(x, breaks=quantile(x, seq(0,1, length.out=11)), include.lowest=T, labels=F) 
    

    有点不清楚你是如何根据你的例子计算你的休息时间的,但是从你的描述来看,这应该是可行的

    x<-c(10, 12, 75, 89, 25, 100, 67, 89, 4, 67, 120.2, 140.5, 170.5, 78.1)
    qq<-cut(x, breaks=seq(min(x),max(x), length.out=11), include.lowest=T, labels=F)
    
    然后我们只需使用带有这些中断的
    cut
    命令来创建要获取的新ID

     # cbind(x, qq)
              x qq
     [1,]  10.0  1
     [2,]  12.0  1
     [3,]  75.0  5
     [4,]  89.0  6
     [5,]  25.0  2
     [6,] 100.0  6
     [7,]  67.0  4
     [8,]  89.0  6
     [9,]   4.0  1
    [10,]  67.0  4
    [11,] 120.2  7
    [12,] 140.5  9
    [13,] 170.5 10
    [14,]  78.1  5
    
    如果你真的想用分位数,你可以用

    qq<-cut(x, breaks=quantile(x, seq(0,1, length.out=11)), include.lowest=T, labels=F) 
    

    有点不清楚你是如何根据你的例子计算你的休息时间的,但是从你的描述来看,这应该是可行的

    x<-c(10, 12, 75, 89, 25, 100, 67, 89, 4, 67, 120.2, 140.5, 170.5, 78.1)
    qq<-cut(x, breaks=seq(min(x),max(x), length.out=11), include.lowest=T, labels=F)
    
    然后我们只需使用带有这些中断的
    cut
    命令来创建要获取的新ID

     # cbind(x, qq)
              x qq
     [1,]  10.0  1
     [2,]  12.0  1
     [3,]  75.0  5
     [4,]  89.0  6
     [5,]  25.0  2
     [6,] 100.0  6
     [7,]  67.0  4
     [8,]  89.0  6
     [9,]   4.0  1
    [10,]  67.0  4
    [11,] 120.2  7
    [12,] 140.5  9
    [13,] 170.5 10
    [14,]  78.1  5
    
    如果你真的想用分位数,你可以用

    qq<-cut(x, breaks=quantile(x, seq(0,1, length.out=11)), include.lowest=T, labels=F) 
    
    这是一种选择:

    d <- read.table(text="10
    12
    75
    89
    25
    100
    67
    89
    4
    67
    120.2
    140.5
    170.5
    78.1")
    
    transform(d, percentile=findInterval(V1, quantile(V1, seq(0,1, by=.1))))
    
    # HEAD:
    # 
    #   V1 percentile
    # 1 10          1
    # 2 12          2
    # 3 75          5
    # 4 89          7
    # 5 25          3
    # 
    #   ---  4  rows omitted ---
    # 
    # TAIL:
    #       V1 percentile
    # 10  67.0          4
    # 11 120.2          9
    # 12 140.5         10
    # 13 170.5         11
    # 14  78.1          6
    
    d这是一个选项:

    d <- read.table(text="10
    12
    75
    89
    25
    100
    67
    89
    4
    67
    120.2
    140.5
    170.5
    78.1")
    
    transform(d, percentile=findInterval(V1, quantile(V1, seq(0,1, by=.1))))
    
    # HEAD:
    # 
    #   V1 percentile
    # 1 10          1
    # 2 12          2
    # 3 75          5
    # 4 89          7
    # 5 25          3
    # 
    #   ---  4  rows omitted ---
    # 
    # TAIL:
    #       V1 percentile
    # 10  67.0          4
    # 11 120.2          9
    # 12 140.5         10
    # 13 170.5         11
    # 14  78.1          6
    
    d这是一个选项:

    d <- read.table(text="10
    12
    75
    89
    25
    100
    67
    89
    4
    67
    120.2
    140.5
    170.5
    78.1")
    
    transform(d, percentile=findInterval(V1, quantile(V1, seq(0,1, by=.1))))
    
    # HEAD:
    # 
    #   V1 percentile
    # 1 10          1
    # 2 12          2
    # 3 75          5
    # 4 89          7
    # 5 25          3
    # 
    #   ---  4  rows omitted ---
    # 
    # TAIL:
    #       V1 percentile
    # 10  67.0          4
    # 11 120.2          9
    # 12 140.5         10
    # 13 170.5         11
    # 14  78.1          6
    
    d这是一个选项:

    d <- read.table(text="10
    12
    75
    89
    25
    100
    67
    89
    4
    67
    120.2
    140.5
    170.5
    78.1")
    
    transform(d, percentile=findInterval(V1, quantile(V1, seq(0,1, by=.1))))
    
    # HEAD:
    # 
    #   V1 percentile
    # 1 10          1
    # 2 12          2
    # 3 75          5
    # 4 89          7
    # 5 25          3
    # 
    #   ---  4  rows omitted ---
    # 
    # TAIL:
    #       V1 percentile
    # 10  67.0          4
    # 11 120.2          9
    # 12 140.5         10
    # 13 170.5         11
    # 14  78.1          6
    

    d假设您的值在
    x
    中,我会这样做

     floor((x-min(x)) / (max(x)-min(x)) *10)
    
    分数
    (x-min(x))/(max(x)-min(x))
    表示我们在范围内有多远。分母
    (max(x)-min(x))
    表示范围,在这种情况下
    170.5-4=166.5
    。分子
    x-min(x)
    计算我们在范围内有多远

    然后我们乘以
    10
    ,并向下取整得到一个介于
    0
    10
    之间的数字

    > floor((x-min(x)) / (max(x)-min(x))*10)
     [1]  0  0  4  5  1  5  3  5  0  3  6  8 10  4
    
    这与您在示例中给出的结果不同,但最低的数字是
    4
    ,例如
    10
    显然属于
    0
    10%
    类别,而不是
    20
    30%
    类别


    编辑:如果您对值的顺序感兴趣,可以这样做

    floor(rank(x) / length(x) * 10)
    
    rank
    给出

    2.0  3.0  7.0  9.5  4.0 11.0  5.5  9.5  1.0  5.5 12.0 13.0 14.0  8.0
    
    然后除以长度(
    14
    ),类似于上面的方法乘以
    10
    ,然后使用
    floor

    > floor(rank(x) / length(x) * 10)
     [1]  1  2  5  6  2  7  3  6  0  3  8  9 10  5
    

    假设您的值在
    x
    中,我会执行以下操作

     floor((x-min(x)) / (max(x)-min(x)) *10)
    
    分数
    (x-min(x))/(max(x)-min(x))
    表示我们在范围内有多远。分母
    (max(x)-min(x))
    表示范围,在这种情况下
    170.5-4=166.5
    。分子
    x-min(x)
    计算我们在范围内有多远

    然后我们乘以
    10
    ,并向下取整得到一个介于
    0
    10
    之间的数字

    > floor((x-min(x)) / (max(x)-min(x))*10)
     [1]  0  0  4  5  1  5  3  5  0  3  6  8 10  4
    
    这与您在示例中给出的结果不同,但最低的数字是
    4
    ,例如
    10
    显然属于
    0
    10%
    类别,而不是
    20
    30%
    类别


    编辑:如果您对值的顺序感兴趣,可以这样做

    floor(rank(x) / length(x) * 10)
    
    rank
    给出

    2.0  3.0  7.0  9.5  4.0 11.0  5.5  9.5  1.0  5.5 12.0 13.0 14.0  8.0
    
    然后除以长度(
    14
    ),类似于上面的方法乘以
    10
    ,然后使用
    floor

    > floor(rank(x) / length(x) * 10)
     [1]  1  2  5  6  2  7  3  6  0  3  8  9 10  5
    

    假设您的值在
    x
    中,我会执行以下操作

     floor((x-min(x)) / (max(x)-min(x)) *10)
    
    分数
    (x-min(x))/(max(x)-min(x))
    表示我们在范围内有多远。分母
    (max(x)-min(x))
    表示范围,在这种情况下
    170.5-4=166.5
    。分子
    x-min(x)
    计算我们在范围内有多远

    然后我们乘以
    10
    ,并向下取整得到一个介于
    0
    10
    之间的数字

    > floor((x-min(x)) / (max(x)-min(x))*10)
     [1]  0  0  4  5  1  5  3  5  0  3  6  8 10  4
    
    这与您在示例中给出的结果不同,但最低的数字是
    4
    ,例如
    10
    显然属于
    0
    10%
    类别,而不是
    20
    30%
    类别


    编辑:如果您对值的顺序感兴趣,可以这样做

    floor(rank(x) / length(x) * 10)
    
    rank
    给出

    2.0  3.0  7.0  9.5  4.0 11.0  5.5  9.5  1.0  5.5 12.0 13.0 14.0  8.0
    
    然后除以长度(
    14
    ),类似于上面的方法乘以
    10
    ,然后使用
    floor

    > floor(rank(x) / length(x) * 10)
     [1]  1  2  5  6  2  7  3  6  0  3  8  9 10  5
    

    假设您的值在
    x
    中,我会执行以下操作

     floor((x-min(x)) / (max(x)-min(x)) *10)
    
    分数
    (x-min(x))/(max(x)-min(x))
    表示我们在范围内有多远。分母
    (max(x)-min(x))
    表示范围,在这种情况下
    170.5-4=166.5
    。分子
    x-min(x)
    计算我们在范围内有多远

    然后我们乘以
    10
    ,并向下取整得到一个介于
    0
    10
    之间的数字

    > floor((x-min(x)) / (max(x)-min(x))*10)
     [1]  0  0  4  5  1  5  3  5  0  3  6  8 10  4
    
    这与您在示例中给出的结果不同,但最低的数字是
    4
    ,例如
    10
    显然属于
    0
    10%
    类别,而不是
    20
    30%
    类别


    编辑:如果您对值的顺序感兴趣,可以这样做

    floor(rank(x) / length(x) * 10)
    
    rank
    给出

    2.0  3.0  7.0  9.5  4.0 11.0  5.5  9.5  1.0  5.5 12.0 13.0 14.0  8.0
    
    然后除以长度(
    14
    ),类似于上面的乘以
    10