我正在使用str_extract()
和str_extract_all()
来看看正则表达式。有零个,一个或多个结果,因此我想将多个结果unnest()
分成多行。由于ab_all中的character(0)(我假设),unnest不会给出输出中的所有行。
library(tidyverse)
my_tbl <- tibble(clmn = c("abcd", "abef, abgh", "xkcd"))
ab_tbl <- my_tbl %>%
mutate(ab = str_extract(clmn, "(?<=ab)[:alpha:]*\\b"),
ab_all = str_extract_all(clmn, "(?<=ab)[:alpha:]*\\b"),
cd = str_extract(clmn, "[:alpha:]*(?=cd)"))
ab_tbl %>% unnest(ab_all, .drop = FALSE)
# A tibble: 3 x 4
clmn ab cd ab_all
<chr> <chr> <chr> <chr>
1 abcd cd ab cd
2 abef, abgh ef NA ef
3 abef, abgh ef NA gh
编辑:预期输出:
# A tibble: 3 x 4
clmn ab cd ab_all
<chr> <chr> <chr> <chr>
1 abcd cd ab cd
2 abef, abgh ef NA ef
3 abef, abgh ef NA gh
4 xkcd NA xk NA
在输出中没有给出带有xkccd的行。是与str_extract_all还是不必要的事情有关,还是应该更改我的方法?
答案 0 :(得分:2)
也许我们可以将0的长度更改为NA
,然后执行unnest
library(tidyverse)
ab_tbl %>%
mutate(ab_all = map(ab_all, ~ if(length(.x) ==0) NA_character_ else .x)) %>%
unnest
注意:假设str_extract
中的模式正确