2016-11-15 48 views
1

我想创建以下矢量使用A,B,C三次重复每个字母:加入列表为载体

BB<-c("a","a","a","b","b","b","c","c","c") 

这是我的代码:

Alphabet<-c("a","b","c") 
AA<-list() 
for(i in 1:3){ 
    AA[[i]]<-rep(Alphabet[i],each=3) 
} 
BB<-do.call(rbind,AA) 

但我得到一个数据帧:

dput(BB) 
structure(c("a", "b", "c", "a", "b", "c", "a", "b", "c"), .Dim = c(3L, 
3L)) 

我在做什么错了?

+3

使用'each'参数'代表(字母,每个= 3)' – akrun

回答

1

正如Akrun提到我们可以使用相同的代表功能 创建它由字母A,B的载体, ç

A <- c("A","B","C") 

申请代表功能相同的载体中,使用各自的子功能

AA <- rep(A,each=3) 

print(AA) 

[1] "A" "A" "A" "B" "B" "B" "C" "C" "C" 
0

这里是一个解决方案,但注意这种形式或追加是不高效的为大的输入阵列

Alphabet <- c("a","b","c") 
bb <- c() 
for (i in 1:length(Alphabet)) { 
    bb <- c(bb, rep(Alphabet[i], 3)) 
} 
+0

请,不鼓励新手时要打在R来使用for循环可用的矢量化函数,例如'rep(c(“A”,“B”,“C”),每个= 3) - - 谢谢。 – Uwe

1

您应该使用c函数来连接,而不是rbind。这会给你载体。

Alphabet<-c("a","b","c") 
AA<-list() 
for(i in 1:3){ 
    AA[[i]]<-rep(Alphabet[i],each=3) 
} 
BB<-do.call(c,AA) 

Akrun的评论也是如此,如果这就是你想要的。

1

您还可以连接的代表功能,像这样: BB <- c(rep("a", 3), rep("b", 3), rep("c", 3))

+0

感谢您的回复。技巧+1。实际上我有一个很长的包含名字的列表,我想创建一个向量,每个连续重复一定次数。 – runjumpfly