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(...)).