在R中重复向量元素

9
我尝试将向量a的元素重复b次。例如,若y=2,则a="abc"应变成"aabbcc"。
为什么以下两个示例代码都无法达到预期效果?
sapply(a, function (x) rep(x,b))

并且来自plyr包,

aaply(a, function (x) rep(x,b))

我知道我错过了一些非常明显的东西...

3个回答

17

a不是向量,你需要将字符串分割成单个字符,例如:

R> paste(rep(strsplit("abc","")[[1]], each=2), collapse="")
[1] "aabbcc"

2
rep函数中的"each="参数也是值得注意的。 :-) - Nicholas Riley
我在问题的描述中犯了一个错误,a确实应该是一个向量,例如a=c("a","b","c")。如果不是这样,你的解决方案显然是正确的。谢谢! - bshor

10

假设您的a是一个向量,sapply将创建一个矩阵,只需要将其合并回一个向量即可:

a<-c("a","b","c")
b<-3 # Or some other number
a<-sapply(a, function (x) rep(x,b))
a<-as.vector(a)
应该创建以下输出:
"a" "a" "a" "b" "b" "b" "c" "c" "c"

忘记折叠它了。这显然是有效的。不确定为什么plyr的aaply不行。哦,算了。 - bshor

0

这里是另一种使用base R中的gsub/strrep的选项。

gsub("(.)", strrep("\\1", 2), a)
#[1] "aabbcc"

数据

a <- 'abc'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接