拆分为列时,用 NA 填充列以获得较短的字符串

Fill columns with NA for shorter strings when splitting to columns

提问人:Hack-R 提问时间:2/14/2016 最后编辑:Tyler RinkerHack-R 更新时间:2/22/2016 访问量:61

问:

假设我有一个 DataFrame,其中的列如下所示:

E <- data.frame(
  c("a brown fox"),
  c("something"),
  c("else")
)
E <- as.data.frame(t(E))

                          V1
c..a.brown.fox.. a brown fox
c..something..     something
c..else..               else

我想把它分成这样的列:

V1         V2     V3
a         brown  fox
something NA     NA
else      NA     NA

但它看起来像这样:

pacman::p_load(qdap) # or use library() or whatever
colsplit2df(E, sep = " ")
                        X1        X2        X3
c..a.brown.fox..         a     brown       fox
c..something..   something something something
c..else..             else      else      else
R 字符串 拆分 QDAP

评论

0赞 David Arenburg 2/14/2016
data.table::setDT(E)[, tstrsplit(V1, "\\s+")]splitstackshape::cSplit(E, "V1", " ")
0赞 lukeA 2/14/2016
什么 ?colsplit2df
0赞 Hack-R 2/14/2016
@lukeA trinker.github.io/qdap/colsplit2df.html
0赞 Hack-R 2/14/2016
@DavidArenburg 我不认为这是重复的,因为引用的问题询问的是等长字符串。他们将每行将 1 个术语分成 2 列。这个问题是关于改变字符串长度的。
0赞 David Arenburg 2/14/2016
没关系,默认情况下,90% 的解决方案将正常工作。您可以在那里看到完全相同的解决方案。这是大约 100 个(至少)类似问题的骗局。我真的很惊讶你没有在谷歌上找到这个。cSplittstrsplit

答:

2赞 lukeA 2/14/2016 #1

你可以做

library(splitstackshape) 
cSplit(E, 1, " ")
#         V1_1  V1_2 V1_3
# 1:         a brown  fox
# 2: something    NA   NA
# 3:      else    NA   NA

评论

0赞 Hack-R 2/14/2016
感谢您的解决方案。我相信这会正常工作,并且只是给未来的读者一个注释,@DavidArenburg在评论中提供了解决方案data.table