R中的字符串拆分选项

时间:2014-08-14 06:41:19

标签: r stringr tidyr

我想问一个与R中字符串拆分选项有关的问题。据我所知,我可以看到三个选项。基数为strsplit()str_split()包中为stringrseparate()包中为tidy。我想知道它们与编程观点有何不同。鉴于我没有接受过程序员的培训,这句话可能并不清楚。让我给你举个例子。过去,我了解了rbind()包中rbindlist()data.table之间的区别。 (Why is rbindlist "better" than rbind?)。这对我来说很好。我想知道哪个字符串选项比其他字符串更好,就像这篇与rbind()rbindlist()相关的帖子一样。我希望这个例子澄清我想要问的问题。感谢您抽出宝贵时间。

1 个答案:

答案 0 :(得分:1)

与strsplit()和str_split()不同,separate采用数据帧并将输出放在数据框的单独列中。 str_split允许您指定要为任何拆分返回的最大字符串数。

有很多方法可以分割字符串(在某些情况下,您可以使用substr和/或grep)。对于大数据,请考虑以下帖子中的答案: Split text string in a data.table columns

以下是一些基准测试结果,您可以创建自己的:

    require(microbenchmark)
    require(stringr)
    require(tidyr)
    require(data.table)

    dt<-data.table(a=letters[1:20],b=letters[15:21],c=1:100)
    dt[,d:=paste(a,b,sep=".")]
    this<-dt[,d]

    microbenchmark(strsplit(this,"[.]"),str_split(this,"[.]"),separate(dt,"d",c("e","f"),"[.]"))
#    Unit: microseconds
#                                      expr      min       lq    median       uq      max neval
#                     strsplit(this, "[.]")   53.432   56.753   59.4705   62.941  103.846   100
#                    str_split(this, "[.]") 4390.459 4878.137 5020.0180 5118.127 6598.367   100
#     separate(dt, "d", c("e", "f"), "[.]")  165.126  178.107  189.7290  232.142  299.460