首页 > 解决方案 > 为什么 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以某种方式工作而不是另一种?

编辑:我忘了提到这个问题似乎类似于R 中的 rbind() 函数在合并的数据帧中产生 NA,但不能解决问题。

编辑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

标签: rrbind

解决方案


基本上这个问题与我在导入数据表时没有指定 stringsAsFactors 应该是 True 还是 False 的事实有关。

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


推荐阅读