2016-11-15 29 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