创建空的R数据帧并逐行添加数据

创建空的R数据帧并逐行添加数据,r,dataframe,rbind,R,Dataframe,Rbind,我是R新手,这个障碍可能是我跨越了R和Python的界限——如果是这样的话,我道歉 我有一些数据作为单独的行提供。我想创建一个空的数据框,并一次添加一行数据。我读过几篇文章,建议如果可能的话不要这样做,但在这种情况下,我认为应该更容易。我读过好几篇文章,给出了同一问题的解决方案,我想我已经遵循了它们。到目前为止,我掌握的代码是: # Create empty dataframe with 1 column for string and several integer columns: d

我是R新手,这个障碍可能是我跨越了R和Python的界限——如果是这样的话,我道歉

我有一些数据作为单独的行提供。我想创建一个空的数据框,并一次添加一行数据。我读过几篇文章,建议如果可能的话不要这样做,但在这种情况下,我认为应该更容易。我读过好几篇文章,给出了同一问题的解决方案,我想我已经遵循了它们。到目前为止,我掌握的代码是:

# Create empty dataframe with 1 column for string and several integer columns:    
df = data.frame(name=character(), int_a=integer(), int_b=integer(), int_c=integer(), int_d=integer(), int_e=integer(), stringsAsFactors=FALSE)

# Create a series of lists containing the data
r1 = list(name="Row1", int_a=13234, int_b=567, int_c=566, int_d=53, int_e=11)
r2 = list(name="Row2", int_a=34454, int_b=34, int_c=643, int_d=33, int_e=56)
r3 = list(name="Row3", int_a=73857, int_b=3, int_c=226, int_d=4, int_e=55)
r4 = list(name="Row4", int_a=86754, int_b=346, int_c=384, int_d=35, int_e=59)
r5 = list(name="Row5", int_a=33748, int_b=456, int_c=461, int_d=6, int_e=85)
r6 = list(name="Row6", int_a=97865, int_b=34654, int_c=65, int_d=35, int_e=148)
r7 = list(name="Row7", int_a=36475, int_b=3444, int_c=365, int_d=55, int_e=34)
r8 = list(name="Row8", int_a=84748, int_b=454, int_c=345, int_d=148, int_e=884)
r9 = list(name="Row9", int_a=94848, int_b=23454, int_c=6548, int_d=7, int_e=566)

# Add row by row:
df = rbind(df, r1)
df = rbind(df, r2)
df = rbind(df, r3)
df = rbind(df, r4)
df = rbind(df, r5)
df = rbind(df, r6)
df = rbind(df, r7)
df = rbind(df, r8)
df = rbind(df, r9)
最终结果几乎是正确的,但也有一些错误——看起来是这样的:

   name int_a  int_b int_c int_d int_e
2  Row1 13234    567   566    53    11
21 <NA> 34454     34   643    33    56
3  <NA> 73857      3   226     4    55
4  <NA> 86754    346   384    35    59
5  <NA> 33748    456   461     6    85
6  <NA> 97865  34654    65    35   148
7  <NA> 36475   3444   365    55    34
8  <NA> 84748    454   345   148   884
9  <NA> 94848  23454  6548     7   566
并生成一系列警告,格式如下:

1: In `[<-.factor`(`*tmp*`, ri, value = "Row2") :
  invalid factor level, NA generated
有人能解释为什么字符串没有输入到数据帧中,为什么行名有点奇怪吗

提前谢谢

options(stringsAsFactors = F)
your code ....
options(stringsAsFactors = T)

这会奏效的。不知道为什么不能像OP那样在数据帧中指定它。请您对此进行澄清

为什么要一次添加一行?一次创建所有数据更安全、更容易。更不用说更快了。同意。永远不要逐行构建数据帧。一次生成一列的data.frames。也没有一堆名为r1、r2等的变量。相关对象可能应该在列表中,以便更容易管理。非常感谢您的快速响应!想要逐行添加的原因是,我所拥有的数据是按主题逐一提供的。e、 g.第13234、567、566、53、11行。与其试图生成具有跳转到错误列的固有风险的数据列,不如按提供的方式添加数据。但是,如果这会引起严重的头痛,那可能不值得。谢谢弗洛德尔。有一个解释几乎和有一个解决方案一样令人满意-非常感谢你的来信。这确实大大改善了情况。字符串已正确输入数据框,但行标签仍然是2,21,3,4,…,而不是我预期的1,2,3,4,…。如果在设置rbind u之前将所有列表替换为data.frame。不幸的是,我知道的还不足以告诉你为什么会出现问题。e、 g.r1=数据帧。。。。