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