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
>
你好我有一个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
>