繁体   English   中英

在R中有条件地拆分列

[英]Splitting Column Conditionally in R

我的数据框看起来像这样:

Var
H2307
A123
F45fjhsk
category
J30HS

我希望它看起来像这样:

Var       Var_1       Var_2
H2307     H           2307
A123      A           123
F45fjhsk  NA          NA
category  NA          NA
J30HS     J           30HS

我尝试了这种变化:

for (i in 1:length(dat$Var)){
   if (nchar(dat$Var) < 7){
     tx <- strsplit(dat$Var[i], split = "(?<=[a-zA-Z])(?=[0-9])", perl = T)
     tx <- t(matrix(tx, nrow=2, ncol=length(tx)/2))
   }
 }

我认为这已经接近了,但仍然行不通; 拆分部分效果很好。 我有“ <7”,因为我要拆分的所有字符串都少于7个字符,因此它不包括“ F45fjhsk”条目。

这是tidyr::extract一个选项:

library(tidyr)
df <- df %>% 
    extract(Var, into=c("Var_1", "Var_2"), regex="^(?=.{1,7}$)([a-zA-Z]+)([0-9].*)$", remove=FALSE)
df

#       Var Var_1 Var_2
#1    H2307     H  2307
#2     A123     A   123
#3 F45fjhsk  <NA>  <NA>
#4 category  <NA>  <NA>
#5    J30HS     J  30HS

^(?=.{1,7}$) 断言字符总数小于或等于七个; ([a-zA-Z]+)与字符串开头的非数字部分匹配; ([0-9].*)匹配第一位数字后的所有内容。

看起来您的regEx排除了第二组中包含字母的可能性

([a-zA-Z])(.+)

通过在第二个集合中使用(。+),您也可以处理这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM