我想将“代码”列的值分为两列,分别命名为“ Country_Code”和“ Product_Code”,其中国家/地区代码将是字符向量(例如AE,BA,UAE),并且产品代码将为数字(例如0303,0306)。现在,“代码”列中的所有值都是字符。
a <- data.frame(Code = c("AE", "0303","0306","0701","BA","UAE","6120"))
答案 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