我有这样的载体:结合在多个行中的相同载体
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
我有这样的载体:结合在多个行中的相同载体
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
另一种选择:
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"
然后为'as.data.frame(t(replicate(5,Vec)))'添加'as.data.frame()'以产生数据帧。 –
一个使用rbind
和do.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
解决方案迄今为止最好的。
呀'矩阵()'是迄今为止以其神奇的回收能力最明智的方式。 –
快速和肮脏的: 'DF < - T(data.frame(VEC,VEC,VEC,VEC,VEC))' – maRtin