2015-10-15 15 views
1

我有這樣的載體:結合在多個行中的相同載體

Vec=c("a" , "b", "c ", "d") 

欲將此作爲數據幀:

 [,1] [,2] [,3] [,4] 
[1,] a b c d 
[2,] a b c d 
[3,] a b c d 
[4,] a b c d 
[5,] a b c d 
+2

快速和骯髒的: 'DF < - T(data.frame(VEC,VEC,VEC,VEC,VEC))' – maRtin

回答

3

另一種選擇:

t(replicate(5, Vec)) 
#  [,1] [,2] [,3] [,4] 
#[1,] "a" "b" "c " "d" 
#[2,] "a" "b" "c " "d" 
#[3,] "a" "b" "c " "d" 
#[4,] "a" "b" "c " "d" 
#[5,] "a" "b" "c " "d" 
+0

然後爲'as.data.frame(t(replicate(5,Vec)))'添加'as.data.frame()'以產生數據幀。 –

3

一個使用rbinddo.call將方式:

do.call(rbind, replicate(5, Vec, simplify = FALSE)) 

    [,1] [,2] [,3] [,4] 
[1,] "a" "b" "c " "d" 
[2,] "a" "b" "c " "d" 
[3,] "a" "b" "c " "d" 
[4,] "a" "b" "c " "d" 
[5,] "a" "b" "c " "d" 

你可以用你喜歡的任何數字替換5

replicate返回列表中的Vec 5次(simplify = FALSE創建列表)。這些元素是rbind -ed使用do.call

更新:

實際使用matrix可能是最好的:

> matrix(Vec, nrow=5, ncol=length(Vec), byrow=TRUE) 
    [,1] [,2] [,3] [,4] 
[1,] "a" "b" "c " "d" 
[2,] "a" "b" "c " "d" 
[3,] "a" "b" "c " "d" 
[4,] "a" "b" "c " "d" 
[5,] "a" "b" "c " "d" 

更改nrow參數任何你想要的號碼,你就準備好它。

全部3個回答將需要使用as.data.frame轉換爲data.frame所以我從微基準排除這樣的:

微基準

> microbenchmark::microbenchmark(t(replicate(5, Vec)), 
+        do.call(rbind, replicate(5, Vec, simplify = FALSE)), 
+        matrix(Vec, nrow=5, ncol=4, byrow=TRUE), 
+        times=1000) 
Unit: microseconds 
               expr min  lq  mean median  uq  max neval 
           t(replicate(5, Vec)) 52.854 59.013 68.393740 63.374 70.815 1749.326 1000 
do.call(rbind, replicate(5, Vec, simplify = FALSE)) 18.986 23.092 27.325856 25.144 27.710 105.708 1000 
     matrix(Vec, nrow = 5, ncol = 4, byrow = TRUE) 1.539 2.566 3.474166 3.079 3.593 29.763 1000 

正如你可以看到matrix解決方案迄今爲止最好的。

+1

呀'矩陣()'是迄今爲止以其神奇的回收能力最明智的方式。 –

相關問題