将文本列拆分为R中数据表中的不规则多个新列

use*_*729 5 r multiple-columns strsplit data.table ragged

我有一个包含20000多行和一列的数据表.每列中的字符串具有不同的单词数.我想拆分单词并将它们放在一个新列中.我知道如何逐字逐句地做到:

Data [ , Word1 := as.character(lapply(strsplit(as.character(Data$complaint), split=" "), "[", 1))]
Run Code Online (Sandbox Code Playgroud)

(Data是我的数据表,complaint是列的名称)

显然,这不是有效的,因为每行中的每个单元具有不同数量的单词.

你能告诉我一个更有效的方法吗?

A5C*_*2T1 10

cSplit从我的"splitstackshape"包中查看.它适用于data.frames或data.tables(但始终返回a data.table).

假设KFB的样本数据至少略微代表您的实际数据,您可以尝试:

library(splitstackshape)
cSplit(df, "x", " ")
#     x_1      x_2         x_3 x_4
# 1: This       is interesting  NA
# 2: This actually          is not
Run Code Online (Sandbox Code Playgroud)

另一个(炽热)选项是使用stri_split_fixedwith simplify = TRUE(来自"stringi")(显然很快就会被认为是"splitstackshape"代码):

library(stringi)
stri_split_fixed(df$x, " ", simplify = TRUE)
#      [,1]   [,2]       [,3]          [,4] 
# [1,] "This" "is"       "interesting" NA   
# [2,] "This" "actually" "is"          "not"
Run Code Online (Sandbox Code Playgroud)


Aru*_*run 10

两个功能,transpose()并且tstrsplit(),是因为在CRAN 1.9.6版本.

有了这个,我们可以做到:

require(data.table)
setDT(tstrsplit(as.character(df$x), " ", fixed=TRUE))[]
#      V1       V2          V3  V4
# 1: This       is interesting  NA
# 2: This actually          is not
Run Code Online (Sandbox Code Playgroud)

tstrsplit是一个包装transpose(strsplit(...)).