如何在R中重复一个字符串N次?
Posted
技术标签:
【中文标题】如何在R中重复一个字符串N次?【英文标题】:How to repeat a String N times in R? 【发布时间】:2014-04-17 00:52:36 【问题描述】:在 Ruby 中,我可以使用以下内容重复字符串 n 次:
例如"my_string" * 2 -> "my_stringmy_string"
在 R 中是否有同样简单的方法可以做到这一点?
【问题讨论】:
【参考方案1】:您可以使用replicate
或rep
:
replicate(2, "my_string")
# [1] "my_string" "my_string"
rep("my_string", 2)
# [1] "my_string" "my_string"
paste
会把它放在一起:
paste(replicate(2, "my_string"), collapse = "")
# [1] "my_stringmy_string"
【讨论】:
【参考方案2】:有了R 3.3.0
,我们可以从base R
使用strrep
strrep("my_string",2)
#[1] "my_stringmy_string"
我们也可以在times
中传递一个值向量
strrep("my_string",1:3)
#[1] "my_string" "my_stringmy_string"
#[3] "my_stringmy_stringmy_string"
【讨论】:
【参考方案3】:使用stringi
包中的stri_dup
函数
stri_dup("abc",3)
[1] "abcabcabc"
它也是矢量化的,所以你可以这样做:
> stri_dup(letters[1:3],4)
[1] "aaaa" "bbbb" "cccc"
性能对比:)
> microbenchmark(stri_dup("abc",3),paste(replicate(3, "abc"), collapse = ""))
Unit: microseconds
expr min lq median uq max neval
stri_dup("abc", 3) 2.362 3.456 7.0030 7.853 64.071 100
paste(replicate(3, "abc"), collapse = "") 57.131 61.998 65.2165 68.017 200.626 100
> microbenchmark(stri_dup("abc",300),paste(replicate(300, "abc"), collapse = ""))
Unit: microseconds
expr min lq median uq max neval
stri_dup("abc", 300) 6.441 7.6995 10.2990 13.757 45.784 100
paste(replicate(300, "abc"), collapse = "") 390.137 419.7740 440.5345 460.042 573.975 100
【讨论】:
在等待手指计划要输入的下一行时,我无法检测到微秒的差异,但对于替代方案 +1。这个包我以前见过,但还没用过。 但是如果你必须使用这个函数 1000 次它会有所不同,不是吗? :)【参考方案4】:stringr
库提供函数str_dup()
:
str_dup("my_string", 2)
[1] "my_stringmy_string"
它是通过字符串和时间向量化的:
str_dup(c("A", "B", "C"), 2:4)
[1] "AA" "BBB" "CCCC"
【讨论】:
以上是关于如何在R中重复一个字符串N次?的主要内容,如果未能解决你的问题,请参考以下文章