我想问一个与R中字符串拆分选项相关的问题。据我所知,我可以看到三个选项。strsplit()
在基地,str_split()
在stringr
包装中,separate()
在tidy
包装中。我想知道它们与编程的观点有何不同。鉴于我没有受过程序员培训,这句话可能不清楚。让我给你举个例子。在过去,我了解了包中rbind()
和rbindlist()
中的区别。data.table
(为什么 rbindlist 比 rbind “更好”?)。这对我来说是很棒的学习。我想知道哪个字符串选项比其他选项更好,就像这篇与rbind()
and相关的帖子一样rbindlist()
。我希望这个例子能澄清我想问的问题。感谢您抽出宝贵的时间。
问问题
491 次
1 回答
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
于 2014-08-14T07:25:39.397 回答