首页 > 解决方案 > 有没有办法更有效地编码这个范围?

问题描述

嗨,我有一个导入到 r 中的文件,我想重新编码其中一个看起来像的列

Number of People
1 to 3
4 to 6 
7 to 10
.
.
.
.

我的“人数”列总共有 30 多个级别。我想做的是将它们转换为数值(即“1到3”变成“2”,“4到6”变成“5”)

由于我有大量数据要处理,是否有更有效的方法来重新编码,或者只有使用 recode() 才有可能?

谢谢!

标签: r

解决方案


这是一个dplyr与 Chris Ruehlemann 的答案具有相同基本结构的基于解决方案

library(dplyr)
library(stringr)

df <- data.frame(Number_of_People = c("1 to 3",
                                       "4 to 6",
                                       "7 to 10"))

df %>%
  mutate(first_numb = as.numeric(str_extract(Number_of_People, "^\\d{1,}")),
         second_numb = as.numeric(str_extract(Number_of_People, "\\d{1,}$"))) %>%
  rowwise() %>%
  mutate(avg = mean(c(first_numb, second_numb)))
# A tibble: 3 x 4
  Number_of_People first_numb second_numb   avg
  <fct>                 <dbl>       <dbl> <dbl>
1 1 to 3                    1           3   2  
2 4 to 6                    4           6   5  
3 7 to 10                   7          10   8.5

推荐阅读