有没有办法在不重复编写data.frame
的情况下对其进行矢量化,如下所示?基本上我想创建大量的列,我正在寻找更短的方式。
QQ <- data.frame(rep(55,100),rep(55,100),rep(55,100),rep(55,100),rep(55,100),rep(55,100),rep(55,100),rep(55,100),rep(55,100),rep(55,100),rep(55,100),rep(55,100),rep(55,100),rep(55,100),rep(55,100),rep(55,100))
names(QQ) <- sprintf("%s%02d", "S", c(1:16))
我不是多次写rep(55,100)
而是想通过矢量化来实现(否则就是函数)。
答案 0 :(得分:3)
rep
'list'对象作为data.frame
的参数:
> QQ <- data.frame(rep(list(rep(55,5)), 5))
> names(QQ) <- sprintf("%s%02d", "S", c(1:5))
> QQ
S01 S02 S03 S04 S05
1 55 55 55 55 55
2 55 55 55 55 55
3 55 55 55 55 55
4 55 55 55 55 55
5 55 55 55 55 55
答案 1 :(得分:0)
或者如何定义行和列以及rep
这些行的产品到矩阵中,使用列dim
矩阵,然后强制转换为data.frame
:
# Desired columns
nc <- 100
# Desired rows
nr <- 1e3
# Turn matrix into data.frame (is this necessary - can you use a matrix - would be quicker)
QQ <- data.frame( matrix( rep( 55 , nc * nr ) , ncol = nc ) )
dim(QQ)
[1] 1000 100
names(QQ) <- sprintf("%s%02d", "S", c(1:nc))
答案 2 :(得分:0)
您可以在rep:
中使用repQQ <- as.data.frame(matrix(rep(rep(55,100),16),nrow=100,ncol=16))
names(QQ) <- sprintf("%s%02d", "S", c(1:16))