创建一个空的data.frame而不指定列名

时间:2018-02-01 16:38:09

标签: r dataframe

我想有这样的事情:

ParseResult

在for循环中创建的行将具有所有相同的列名。那么是否可以不初始化列名?

更新

谢谢大家的帮助 但是我的回答并不清楚,抱歉 我想在for循环中说明列的名称。

我现在收到以下消息:
match.names(clabs,nmi)中的错误:名称与以前的名称不匹配 而我能看到的是,列名中的空格变为点。 有没有办法让名字不会事先改变或改变。<​​/ p>

4 个答案:

答案 0 :(得分:3)

像这样对它进行初始化:

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

答案 1 :(得分:2)

for(i in 1:20){

# create a row 

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

}

实际上,最好为每列初始化一个向量,用循环填充向量,然后在循环后创建一个数据帧。

答案 2 :(得分:2)

NULL或在循环结束时将martix转换为数据帧:

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)

答案 3 :(得分:2)

如果您事先知道类型,可以

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