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

时间:2014-12-15 02:14:58

标签: r dataframe rbind

我是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

任何人都可以解释为什么字符串没有输入数据帧以及为什么行名称有点奇怪?

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

这会奏效。不知道为什么你不能像OP那样在数据框中指定它。希望澄清这一点