首页 > 解决方案 > 清除特殊字符、数字和字符

问题描述

我的数据框中有一个如下所示的变量

df$emp_length(10+ years, <1 year, 8 years)

我需要清理这个变量以便更好地分析。例如,我想将此变量与其他分类或数值变量进行比较。将此变量分成多列的最佳方法是什么。

我正在考虑根据空间来分隔这个变量,如下所示,

df$emp_length = c(10+, <1, 8)     
df$years = c(years, years, years)

另外我想知道带有特殊字符(如 + 和 <)的数字是否会被视为 R 中的数字,或者我必须将特殊字符和数字分开?

我想将 emp_length 变量作为数字,将 years 变量作为字符。

请帮忙!

标签: r

解决方案


一个人可以tidyr::extract用来首先emp_length在 2 列中分开。然后用数字替换任何符号(除 之外的任何符号0-9)到""列中,然后将其转换为数字。

选项#1:用数字保留符号

library(tidyverse)
df <- df %>% extract(emp_length, c("emp_length", "years"), 
                              regex="([[:digit:]+<]+)\\s+(\\w+)")

df
#   emp_length years
# 1        10+ years
# 2         <1  year
# 3          8 years

选项#2:只有数字,但列是数字

library(tidyverse)

df <- df %>% 
extract(emp_length, c("emp_length", "years"), regex="([[:digit:]+<]+)\\s+(\\w+)") %>%
  mutate(emp_length = as.numeric(gsub("[^0-9]","\\1",emp_length)))

df
#   emp_length years
# 1         10 years
# 2          1  year
# 3          8 years

数据:

df <- data.frame(emp_length = c("10+ years", "<1 year", "8 years"),
                                           stringsAsFactors = FALSE)

推荐阅读