尝试提取分号之间的数据并将该数据放入新列中。
这是一些数据
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。我不太了解正则表达式,因此将不胜感激地收到解决方案和解释。
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)
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是一个特殊的且兼容的情况)。
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |