【问题标题】:string split options in R [closed]R中的字符串拆分选项[关闭]
【发布时间】:2014-10-07 17:22:58
【问题描述】:

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

【问题讨论】:

  • 我建议您尝试每一个。 :) 使用 microbenchmark 包来测试哪个运行最快。
  • 本站不是专门征求意见,而是回答编程问题。将您的问题重新表述为可以客观回答的内容。
  • Roman,感谢您的 cmets。我无意寻求选择。我更想知道它们与编程观点有何不同。我想我的意图没有通过,因为英语是我的第二语言。我会改写我的问题。谢谢。
  • 如果你真的想四处看看,QDAP 包有 colSplit() 和 colSplit2df()。

标签: r stringr tidyr


【解决方案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   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2016-05-21
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多