如何在R中的变量中拆分字符串变量(非矩形)

Fab*_*Gil 2 string split r dataframe

我在数据帧中有以下变量

test<-data.frame(x=c("", "1-7-9", "3", "2-4-6-8"))
Run Code Online (Sandbox Code Playgroud)

我想在变量中拆分:

Var1 Var2 Var3 Var4
NA   NA   NA   NA
1    7    9
3    NA   NA   NA
2    4    6   8
Run Code Online (Sandbox Code Playgroud)

我试过了

 test2<-strsplit(as.character(vartest$x), "\\-")  
Run Code Online (Sandbox Code Playgroud)

但我得到一个列表而不是数据帧

请帮我

Ric*_*ven 5

library(data.table)
setDT(test)[, tstrsplit(x, "-", type.convert = TRUE, fixed = TRUE)]
#    V1 V2 V3 V4
# 1: NA NA NA NA
# 2:  1  7  9 NA
# 3:  3 NA NA NA
# 4:  2  4  6  8
Run Code Online (Sandbox Code Playgroud)

注意:data.table dev版本1.9.5.type.convert字符转换的参数和因子已经在#1094的最新开发版本中实现(感谢Arun!).

要么

splitstackshape::cSplit(test, "x", "-")
#    x_1 x_2 x_3 x_4
# 1:  NA  NA  NA  NA
# 2:   1   7   9  NA
# 3:   3  NA  NA  NA
# 4:   2   4   6   8
Run Code Online (Sandbox Code Playgroud)

这两个返回数据表都可以通过分配结果然后使用来转换回数据帧setDF().它们还将数字字符正确转换为分类的"整数"列.


而且只是为了好玩,这是一个很难获得数据框架的方法 scan()

x <- as.character(test$x)
v <- max(vapply(strsplit(x, "-", fixed = TRUE), length, 1L))
s <- scan(text = x, what = as.list(integer(v)), sep = "-", fill = TRUE, 
    na.strings = "", blank.lines.skip = FALSE)
setNames(data.frame(s), make.names(seq_along(s)))
#   X1 X2 X3 X4
# 1 NA NA NA NA
# 2  1  7  9 NA
# 3  3 NA NA NA
# 4  2  4  6  8
Run Code Online (Sandbox Code Playgroud)