嘗試在分號之間提取資料并將該資料放入新列中。
這是一些資料
df <- data.frame(data = c("a;;c;d", "a;b;;d","a;;;d","a;b;;;"), num =c(1:4))
這是我到目前為止從 SO 中拼湊出來的
res <- df %>%
mutate(
colA = str_extract(data, "^[^;]*(?=;)"),
colB = str_extract(data, "(?<=;)[^;]*(?=;)"),
colC = str_extract(data, "(?<=;)(?<=;)[^;]*(?=;)"),
colD = str_extract(data, "(?<=;)[^;]*$")
)
它幾乎可以滿足我的要求,但colC與colB. 我不太了解正則運算式,因此將不勝感激地收到解決方案和解釋。
uj5u.com熱心網友回復:
基數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
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
這不需要顯式賦值就可以作業,因為mutate(and summarize) 會很高興地采用一個命名的- list(這data.frame是一個特殊的——并且兼容的——案例)。
uj5u.com熱心網友回復:
除了 r2evans 基礎 R 和 dplyr:
資料表
library(data.table)
df <- data.table(data = c("a;;c;d", "a;b;;d","a;;;d","a;b;;;"), num =c(1:4))
df[, c("ColA", "ColB", "ColC", "ColD"):=tstrsplit(data, ";")]
df
data num ColA ColB ColC ColD
1: a;;c;d 1 a c d
2: a;b;;d 2 a b d
3: a;;;d 3 a d
4: a;b;;; 4 a b
uj5u.com熱心網友回復:
另一種解決方案,使用tidyr::separate:
library(tidyverse)
df <- data.frame(data = c("a;;c;d", "a;b;;d","a;;;d","a;b;;;"), num =c(1:4))
df %>%
separate(data, into = str_c("col", letters[1:4]), sep=";", extra="drop")
#> cola colb colc cold num
#> 1 a c d 1
#> 2 a b d 2
#> 3 a d 3
#> 4 a b 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399287.html
上一篇:C 通過函式傳遞引數
