将数字和字符数据从一列分为两列

时间:2020-05-23 11:15:37

标签: r tidyverse

我想将“代码”列的值分为两列,分别命名为“ Country_Code”和“ Product_Code”,其中国家/地区代码将是字符向量(例如AE,BA,UAE),并且产品代码将为数字(例如0303,0306)。现在,“代码”列中的所有值都是字符。

a <- data.frame(Code = c("AE", "0303","0306","0701","BA","UAE","6120"))

4 个答案:

答案 0 :(得分:3)

这将分隔列

library(tidyverse)

a<-a %>%  mutate(Product_Code = str_extract(Code,   "[a-zA-Z]*"))

a<-a %>%  mutate(Country_Code = str_extract(Code,   "[0-9]*"))

a$Country_Code<-as.numeric(a$Country_Code)

答案 1 :(得分:2)

有很多方法可以做到这一点。在基数R中,您可以这样做:

a <- data.frame(Code= c("AE", "0303", "0306", "0701", "BA", "UAE", "6120"))

a$Country_Code <- gsub("[^A-Z]+", NA, a$Code)
a$Product_Code <- as.numeric(gsub("[A-Z]+", NA, a$Code))

答案 2 :(得分:2)

Base R解决方案:

within(a, {
  country_code <- as.integer(gsub("[a-zA-Z]+", NA_character_, Code))
  product_code <- gsub("\\d+", NA_character_, Code)
  rm(Code)})

答案 3 :(得分:1)

这是一个相当简单的dplyr解决方案:

a %>% mutate(Country_code = str_extract(Code, "[A-Z]+"),
             Product_code = str_extract(Code, "\\d+"))
  Code Country_code Product_code
1   AE           AE         <NA>
2 0303         <NA>         0303
3 0306         <NA>         0306
4 0701         <NA>         0701
5   BA           BA         <NA>
6  UAE          UAE         <NA>
7 6120         <NA>         6120