我有以下
ex <- tribble(
~type,
"a__0",
"ab__10"
)
> ex
type
a__0
ab__10
我想用“_”分隔。结果将是
letter extra
a __0
ab __10
注意双下划线
但是当我使用以下
时ex %>% separate(type,into=c("letter","extra"),sep = "_")
我得到了
letter extra
a
ab
答案 0 :(得分:4)
在第一个下划线之前插入一个逗号,然后用逗号分隔:
ex %>%
mutate(type = sub("_", ",_", type)) %>%
separate(type, into = c("letter", "extra"), sep = ",")
,并提供:
# A tibble: 2 x 2
letter extra
* <chr> <chr>
1 a __0
2 ab __10
答案 1 :(得分:2)
这是另一个想法。将列分开,然后再添加__
。
library(tidyverse)
ex %>%
separate(type, into = c("letter", "extra")) %>%
mutate(extra = paste0("__", extra))
# # A tibble: 2 x 2
# letter extra
# <chr> <chr>
# 1 a __0
# 2 ab __10
或者将extract
与捕获组一起使用。
ex %>%
extract(type, into = c("letter", "extra"), regex = "([A-Za-z]+)(\\__[0-9]+)")
# # A tibble: 2 x 2
# letter extra
# <chr> <chr>
# 1 a __0
# 2 ab __10
答案 2 :(得分:2)
你也可以使用积极的前瞻:
ex %>% separate(type,sep = "(?=_)", into = c("letter", "extra"), extra = "merge")
答案 3 :(得分:1)
str_split在这里工作
a <- do.call(rbind , strsplit( c("a__0","ab__10"), "__") )
a[ , 2 ] <- paste0( "__", a[ , 2 ] )
如果你不想要&#34; __&#34;而不是不运行第二行