如何在R中向量化创建列

时间:2013-06-07 14:58:39

标签: r dataframe vectorization

有没有办法在不重复编写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)而是想通过矢量化来实现(否则就是函数)。

3 个答案:

答案 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:

中使用rep
QQ <- as.data.frame(matrix(rep(rep(55,100),16),nrow=100,ncol=16))
names(QQ) <- sprintf("%s%02d", "S", c(1:16))