使用列名创建空data.frame

Khu*_*eed 13 r dataframe

我正在尝试创建一个包含两列和未知行数的空数据框.我想指定列的名称.我运行了以下命令

dat <- data.frame("id"=numeric(),"nobs"=numeric())  
Run Code Online (Sandbox Code Playgroud)

我可以通过运行来测试结果

> str(dat)
'data.frame':   0 obs. of  2 variables:
 $ id  : num 
 $ nobs: num   
Run Code Online (Sandbox Code Playgroud)

但是稍后当我使用以下命令中的rbind将数据插入此数据框时,列的名称也会更改

  for (i in id) {
    nobs = nrow(na.omit(read.csv(files_list[i])))
    dat = rbind(dat, c(i,nobs))
  } 
Run Code Online (Sandbox Code Playgroud)

在for循环之后,这是dat的值

dat
  X3 X243
1  3  243
Run Code Online (Sandbox Code Playgroud)

str命令显示以下内容

str(dat)

'data.frame':   1 obs. of  2 variables:
 $ X3  : num 3
 $ X243: num 243
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉为什么数据框中的列名称会发生​​变化

编辑:

我解决问题的懒惰解决方案是在for循环之后运行以下命令,将数据绑定到我的data.frame

names(dat)[1] = "id"
names(dat)[2] = "nobs"
Run Code Online (Sandbox Code Playgroud)

MrF*_*ick 10

有趣的是,该rbind.data.frame函数抛弃了所有传递的零行数值.它基本上发生在这一行

allargs <- allargs[nr > 0L]
Run Code Online (Sandbox Code Playgroud)

所以传入没有行的data.frame,实际上就像没有传递任何东西一样.另一个很好的例子,为什么尝试逐行构建data.frame几乎总是一个坏主意.更好地构建向量,然后仅在完成时组合成data.frame.

  • 使用你的for循环将数据读入*list*的数据帧,然后`do.call(rbind,list_of_frames)` (4认同)