为什么rbind试图合并两个矩阵时行为奇怪?

时间:2018-10-16 08:09:33

标签: r rbind

我正在尝试使用rbind合并两个矩阵,但这给了我一些我无法理解的警告。一段代码将说明。首先,我发布要合并的两个矩阵:

> first.m
   label valueA valueB valueC measureA measureB measureC measureD
2      2    158   1020     10     94.0       20        8        0
4      4    101   1016     10     11.0        5        7        0
9      9    439   1003     10     12.0        7        7        0
11    11    434    985     10     25.5        6       12        0
12    12    839    984     10     39.5       18        8        0
14    14    339    979     10     43.5       13       13        0
23    23    127    926     10     16.5        6       10        0
26    25    748    916     10     57.0       13       14        0
34    33    352    904     10     43.5       15       20        0
35    34    254    904     10    239.5       29       14        0
> second.m
   label valueA valueB valueC measureA measureB measureC measureD
1      5    832   1019     20     15.0        9        6        0
2      7    158   1020     20    102.5       24        8        0
3      8    139   1020     20     60.0       14        7        0
4     17    321   1018     20     77.0       14       10        0
5     21    815   1014     20    132.0       17       17        0
6     25    719   1009     20    158.0       21       14        0
7     28    496   1002     20      7.0        5        5        0
8     39    493    992     20     36.0        7       13        0
9     45    840    984     20     47.0       19        9        0
10    53    339    978     20     53.5       12       11        0

然后有关数据性质的一些信息似乎与我遇到的问题有关:

> typeof(first.m$label); typeof(second.m$label)
[1] "integer"
[1] "integer"
> typeof(first.m$label[1]); typeof(second.m$label[1])
[1] "integer"
[1] "integer"

最后是实际问题:

> this.work <- rbind(first.m, second.m)
> this.doesnt <- rbind(second.m, first.m)
Warning message:
In `[<-.factor`(`*tmp*`, ri, value = c(2L, 4L, 9L, 11L, 12L, 14L,  :
  invalid factor level, NA generated

为什么 rbind 以一种方式而不是另一种方式起作用?

编辑: 我忘了提一下,这个问题似乎与rbind() function in R produces NA's in the merged dataframe类似,但不能解决问题。

编辑2:

如@Rob的评论所述,此处str()的结果应用于我的两个矩阵。

> str(first.m)
'data.frame':   10 obs. of  8 variables:
 $ nodeName: int  2 3 7 8 9 10 12 17 20 21
 $ x       : int  158 139 496 493 840 339 296 292 129 1008
 $ y       : int  1020 1020 1002 992 984 978 973 937 925 919
 $ z       : int  20 20 20 20 20 20 20 20 20 20
 $ area    : num  102 60 7 36 47 ...
 $ width   : int  24 14 5 7 19 12 7 14 10 7
 $ height  : int  8 7 5 13 9 11 13 7 15 6
 $ zetaMean: num  0 13 0 7 0 0 0 0 0 0
> str(second.m)
'data.frame':   10 obs. of  8 variables:
 $ nodeName: Factor w/ 275 levels "1003","1018",..: 152 210 235 70 80 87 94 125 139 160
 $ x       : int  832 158 139 321 815 719 496 493 840 339
 $ y       : int  1019 1020 1020 1018 1014 1009 1002 992 984 978
 $ z       : int  20 20 20 20 20 20 20 20 20 20
 $ area    : num  15 102 60 77 132 ...
 $ width   : int  9 24 14 14 17 21 5 7 19 12
 $ height  : int  6 8 7 10 17 14 5 13 9 11
 $ zetaMean: num  0 0 0 0 0 0 0 0 0 0

1 个答案:

答案 0 :(得分:0)

基本上,该问题与以下事实有关:我在导入数据表时未指定stringAsFactors是True还是False。

当我不提供任何信息时,R会将数据作为因素导入,因此出现了@Rob注释中提到的错误。