我需要将一列拆分为2列,结果列包含原始列的数字或字符部分。
df <- data.frame(myCol = c("24 hours", "36days", "1month", "2 months +"))
myCol
24 hours
36days
1month
2 months +
结果应为:
alpha numeric
hours 24
days 36
month 1
months + 2
请注意原始数据帧的格式不一致(有时带有空格,有时没有)。
整洁或基本的解决方案都很好
谢谢
答案 0 :(得分:4)
一种解决方案可能是:
library(tidyverse)
df %>%
separate(myCol,
into = c("numeric", "alpha"),
sep = "(?=[a-z +]+)(?<=[0-9])"
)
哪个返回:
numeric alpha
1 24 hours
2 36 days
3 1 month
4 2 months +
答案 1 :(得分:0)
您可以这样做:
library(stringr)
df$numeric <- str_extract(df$myCol, "[0-9]+")
df$alpha <- str_remove(df$myCol, df$numeric)
或具有基本功能
df$numeric <- regmatches(df$myCol, regexpr("[0-9]+", df$myCol))
df$alpha <- gsub("[0-9]+", "", df$myCol)