提取r中分号之间的字符

TDa*_*Daw 2 string split r

尝试提取分号之间的数据并将该数据放入新列中。

这是一些数据

df <- data.frame(data = c("a;;c;d", "a;b;;d","a;;;d","a;b;;;"), num =c(1:4))
Run Code Online (Sandbox Code Playgroud)

这是我迄今为止收集到的内容

res <- df %>% 
  mutate(
    colA = str_extract(data, "^[^;]*(?=;)"),
    colB = str_extract(data, "(?<=;)[^;]*(?=;)"),
    colC = str_extract(data, "(?<=;)(?<=;)[^;]*(?=;)"),
    colD = str_extract(data, "(?<=;)[^;]*$")
  ) 
Run Code Online (Sandbox Code Playgroud)

它几乎达到了我想要的效果,但colC与 相同colB。我不太了解正则表达式,因此将不胜感激地收到解决方案和解释。

r2e*_*ans 6

碱基R

cbind(df, read.csv2(text = df$data, header = FALSE))
#     data num V1 V2 V3 V4 V5
# 1 a;;c;d   1  a     c  d NA
# 2 a;b;;d   2  a  b     d NA
# 3  a;;;d   3  a        d NA
# 4 a;b;;;   4  a  b       NA
Run Code Online (Sandbox Code Playgroud)

dplyr

library(dplyr)
df %>%
  mutate(read.csv2(text = data, header = FALSE))
#     data num V1 V2 V3 V4 V5
# 1 a;;c;d   1  a     c  d NA
# 2 a;b;;d   2  a  b     d NA
# 3  a;;;d   3  a        d NA
# 4 a;b;;;   4  a  b       NA
Run Code Online (Sandbox Code Playgroud)

无需显式赋值即可工作,因为mutate(and summarize) 会很乐意采用命名的 - list(其中data.frame是一个特殊的且兼容的情况)。