R:循环遍历所有唯一值并对其进行计数

6tqwzwtp  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(149)

我有一个包含员工信息的数据集。我有一列列出了员工的当前年龄,还有一列列出了他们的工资。我想创建一个包含3列的R数据框:一个显示所有不同的年龄,一个计算该年龄的人数,一个给出每个特定年龄的工资中位数。除此之外,我还想将21岁以下和65岁以上的人分组。理想情况下,它应该是这样的:
| 年龄|人数|工资中位数|
| - ------|- ------|- ------|
| 21岁以下|三十六|二万六千三百人|
| 二十二|十五|二万六千三百人|
| 二十三|三十|二万七千零二十人|
| 二十四|四十一|二万六千三百人|
| 等等|||
| 65岁以上|四十七|三万九千一百人|
当前数据集有数百列和数千行,但感兴趣的列如下所示:
| 岁|萨尔22|
| - ------|- ------|
| 四十六|二万八千二百五十人|
| 三十二|二万六千三百人|
| 十九|二万七千零二十人|
| 二十四|二万六千三百人|
| 五十三|三万六千一百零五|
| 四十七|三万九千一百人|
| 四十七|二万六千二百人|
| 七十|六万九千五百人|
| 六十八|七万五千三百一十人|
我有点迷失在做这件事的最佳方式,但假设某种循环将最好的工作?非常感谢任何指导或帮助。

gudnpqoy

gudnpqoy1#

library(tidyverse) 

sample_data <- tibble(
  age = sample(17:70, 100, replace = TRUE) %>% as.character(), 
  salary = sample(20000:90000, 100, replace = TRUE)
)

# A tibble: 100 × 2
   age   salary
   <chr>  <int>
 1 56     35130
 2 56     44203
 3 20     28701
 4 47     66564
 5 66     60823
 6 54     36755
 7 66     30731
 8 68     21338
 9 19     80875
10 61     44547
# … with 90 more rows
# ℹ Use `print(n = ...)` to see more rows

sample_data %>%  
  mutate(age = case_when(age <= 21 ~ "Under 21", 
                         age >= 65 ~ "Over 65", 
                         TRUE ~ age)) %>% 
  group_by(age) %>%  
  summarise(count = n(), 
            median_salary = median(salary)) 

# A tibble: 38 × 3
   age   count median_salary
   <chr> <int>         <dbl>
 1 22        4        46284.
 2 23        3        55171 
 3 25        3        74545 
 4 27        1        37052 
 5 28        3        66006 
 6 29        1        82877 
 7 30        2        40342.
 8 31        2        27815 
 9 32        1        32282 
10 33        3        64523 
# … with 28 more rows
# ℹ Use `print(n = ...)` to see more rows

相关问题