str 将它除以最后 "number_"

strsplit it by the last "number_"

你好我有一个df比如

COL1
SEQ_1.1_0
SEQ2.2_2
AB_1_2.3_3
ACC.3_3

我想用最后一个“number_”拆分它

并得到:

COL1      COL2
SEQ_1.1   0
SEQ2.2    2
AB_1_2.3  3
ACC.3     3

到目前为止我尝试了:

strsplit(df$COL1, "*.[0-9]_")

这里是我使用和需要使用的代码

df$shorti = do.call(rbind, strsplit(as.character(df$COL1), "*.[0-9]_"))[,1]

使用tidyr::extract

tidyr::extract(df, COL1, c('COL1', 'COL2'), regex = '(.*)_(.*)', convert = TRUE)

#      COL1 COL2
#1  SEQ_1.1    0
#2   SEQ2.2    2
#3 AB_1_2.3    3
#4    ACC.3    3

strsplit 使用来自 here 的正则表达式,负前瞻。

result <- do.call(rbind, strsplit(df$COL1, '(_)(?!.*_)', perl = TRUE))

这是一个 base R 解决方案 sub:

数据:

df <- data.frame(
  COL1 = c("SEQ_1.1_0",
  "SEQ2.2_2",
  "AB_1_2.3_3",
  "ACC.3_3")
)

解决方案:

df$COL2 <- sub(".*(\d$)", "\1", df$COL1) 
df$COL1 <- sub("_\d$", "", df$COL1)

结果:

df
      COL1 COL2
1  SEQ_1.1    0
2   SEQ2.2    2
3 AB_1_2.3    3
4    ACC.3    3

使用子字符串:

> dat                  
        COL1
1  SEQ_1.1_0
2   SEQ2.2_2
3 AB_1_2.3_3
4    ACC.3_3
> dat$COl2 <- substr(dat$COL1,nchar(dat$COL1),nchar(dat$COL1)+1)
> dat$COL1 <- substr(dat$COL1,1,nchar(dat$COL1)-2)
> dat
      COL1 COl2
1  SEQ_1.1    0
2   SEQ2.2    2
3 AB_1_2.3    3
4    ACC.3    3
>