将一列分为数字和非数字部分

时间:2019-07-23 19:41:57

标签: r regex

我需要将一列拆分为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

请注意原始数据帧的格式不一致(有时带有空格,有时没有)。

整洁或基本的解决方案都很好

谢谢

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)