不指定列名创建一个空的数据框。

4
我希望有类似于这样的内容:

我希望能够实现以下功能:

#initialize a empty data frame without saying what the column names are    
dataFrame = data.frame()

for(1:20){

Create a row 

dataFrame = rbind(dataFrame, row)

}

在for循环中创建的行将具有相同的列名。那么是否可以不初始化列名呢?
更新:
感谢大家的帮助。 但是我的回答不够清晰,抱歉。 我想在for循环中声明列的名称。
现在我收到以下消息: match.names(clabs, nmi)中的错误:名称与先前的名称不匹配 我所看到的是列名中的空格被更改为点。 是否有一种方法使名称不改变或提前更改?

不知道你为什么需要创建一个没有列名的数据框,所以很难回答这个问题,因为有可能R有更强大的方法来实现你想要的,而不需要使用for()循环。不要假设R和其他编程语言做事情的方式相同。告诉我们你想要实现什么,而不是告诉我们你想要如何实现它。 - dcarlson
4个回答

4

按照以下方式初始化:

dataFrame<-NULL
db2<-data.frame(a=c(1,1,0,1,0,0)) 
rbind(dataFrame,db2)
  a
1 1
2 1
3 0
4 1
5 0
6 0

根据您的问题代码(稍作修改以使其运行):

for(i in 1:5)
{
   row<-c(a=i,b=i,c=i)
   dataFrame = rbind(dataFrame, row)
}

输出
DataFrame
    a b c
row 1 1 1
row 2 2 2
row 3 3 3
row 4 4 4
row 5 5 5

我将向数据框中添加行而不是列。 - Cing
rbind函数用于添加行,而不是列。 - Terru_theTerror
但是你也可以将行设置为这样:row <- c(a=i, b=i, c=i)。 - Cing
可以的。在这种情况下,您可以在for循环内部分配列名称。答案根据此更改。 - Terru_theTerror

3
for(i in 1:20){

# create a row 

if(i == 1) dataFrame <- t(row)
else dataFrame <- rbind(dataFrame, row)

}

但事实上,更好的方法是为每一列初始化一个向量,用循环填充向量,然后在循环之后创建数据框。


3
如果您事先知道类型,您可以执行以下操作:
df1 = data.frame(INTS = integer(0),
                 CHRS = character(),
                 NUMS = numeric(0))

for(i in 1:5){
    row = setNames(data.frame(i, letters[i], i + 0.5), names(df1))
    df1 = rbind(df1, row)
}

df1
#  INTS CHRS NUMS
#1    1    a  1.5
#2    2    b  2.5
#3    3    c  3.5
#4    4    d  4.5
#5    5    e  5.5

你仍然提前为列命名,我希望在for循环中完成。 - Cing

2

在循环结束时,可以选择将矩阵转换为数据框,或者仅返回NULL:

df = data.frame(NULL)

for(i in 1:20){
  row = i
  df = rbind(df,row)
}
class(df)
> [1] "data.frame"

或者

df = NULL

for(i in 1:20){
  row = i
  df = rbind(df,row)
}
class(df)
df = data.frame(df)
class(df)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接