首页 > 解决方案 > 根据其他列计算列中的比率

问题描述

我正面临一个思考和编程问题。请参阅下面我的问题,我不知道什么是正确的方法(使用 DPLYR 的 group_by,但没有结果)。非常感谢您在这里尝试帮助我!

我有一个这样的数据集:

Numbers   Area      Cluster  
1         A          1            
0.8       A          1
0.78      A          1
0.7       B          1
0.4       A          2
0         C          1 

我想计算两个新列:

  1. 显示特定集群中出现的区域百分比(Column_Example_1)
  2. 每个集群,列号的新索引(范围从 1 - 0)(Column_example_2)。新的比率应该基于列 Numbers #note:在示例中它只是一个示例,它也可以做不同的事情,但我们要确保列 Numbers 领先)

结果应该是这样的:

Numbers   Area      Cluster  Example_1                             Example_2 
1         A          1          60%  #5x cluster 1, and 3x Area A)   1
0.8       A          1          60%                                  0.8  
0.78      A          1          60%                                  0.78
0.7       B          1          20%                                  0.7 
0.4       A          2         100%                                  1
0         C          1          20%                                  0

标签: r

解决方案


由于要保留所有行,因此可以按如下方式计算相对频率:

library(tidyverse)
df <- data.frame(numbers = c(1, .8, .78, .7, .4, 0),
                 area = c("A", "A", "A", "B", "A", "C"),
                 cluster = c(1, 1, 1, 1, 2, 1))

df %>% 
  group_by(cluster) %>%
  mutate(example_1 = n()) %>%
  group_by(area, cluster) %>%
  mutate(example_1 = n() / example_1)

# A tibble: 6 x 4
# Groups:   area, cluster [4]
  numbers area  cluster example_1
    <dbl> <fct>   <dbl>     <dbl>
1    1    A           1       0.6
2    0.8  A           1       0.6
3    0.78 A           1       0.6
4    0.7  B           1       0.2
5    0.4  A           2       1  
6    0    C           1       0.2

推荐阅读