我的数据框中有一个如下所示的变量
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变量作为字符。
请帮助!
答案 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)