清除特殊字符,数字和字符

时间:2018-06-30 09:41:16

标签: r

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

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变量作为字符。

请帮助!

1 个答案:

答案 0 :(得分:1)

一个人可以使用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)