我是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
任何人都可以解释为什么字符串没有输入数据帧以及为什么行名称有点奇怪?
提前致谢。
答案 0 :(得分:0)
options(stringsAsFactors = F)
your code ....
options(stringsAsFactors = T)
这会奏效。不知道为什么你不能像OP那样在数据框中指定它。希望澄清这一点