0

有没有一种方法可以在data.frame不重复编写 a 的情况下矢量化它的创建,如下所示?基本上我想创建大量的列,我正在寻找更短的方法。

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)我不想写很多次,而是想通过矢量化(否则使用函数)来完成。

4

3 回答 3

3

rep一个“列表”对象作为参数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
于 2013-06-07T15:03:13.687 回答
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))
于 2013-06-07T15:20:08.777 回答
0

您可以在代表中使用代表:

QQ <- as.data.frame(matrix(rep(rep(55,100),16),nrow=100,ncol=16))
names(QQ) <- sprintf("%s%02d", "S", c(1:16))
于 2013-06-07T15:20:14.620 回答