【发布时间】:2016-01-26 14:36:35
【问题描述】:
我有两张表我希望通过dplyr 包left_join。问题是为所有新列(我所追求的列)生成NA 值。
如下所示,left_join 为 Incep.Price 和 DayCounter 的新列生成 NA 值。为什么会发生这种情况,如何解决?
更新:感谢@akrun,使用left_join(Avanza.XML, checkpoint, by = c('Firm' = 'Firm')) 解决了问题并且列正确连接。
但是警告消息是一样的,有人可以解释这种行为吗?为什么在这种情况下必须明确指定 join 列,或者生成 NA 值?
> head(Avanza.XML)
Firm Gain.Month.1 Last.Price Vol.Month.1
1 Stockwik Förvaltning 131.25 0.074 131264420
2 Novestra 37.14 7.200 605330
3 Bactiguard Holding 29.55 14.250 2815572
4 MSC Group B 20.87 3.070 671855
5 NeuroVive Pharmaceutical 18.07 9.800 3280944
6 Shelton Petroleum B 16.21 3.800 2135798
> head(checkpoint)
Firm Gain.Month.1 Last.Price Vol.Month.1 Incep.Price DayCounter
1 Stockwik Förvaltning 87.50 0.06 91270090 0.032000 2016-01-25
2 Novestra 38.10 7.25 604683 5.249819 2016-01-25
3 Bactiguard Holding 29.09 14.20 2784161 11.000077 2016-01-25
4 MSC Group B 27.56 3.24 657699 2.539981 2016-01-25
5 Shelton Petroleum B 19.27 3.90 1985305 3.269892 2016-01-25
6 NeuroVive Pharmaceutical 16.87 9.70 3220303 8.299820 2016-01-25
> head(left_join(Avanza.XML, checkpoint))
Joining by: c("Firm", "Gain.Month.1", "Last.Price", "Vol.Month.1")
Firm Gain.Month.1 Last.Price Vol.Month.1 Incep.Price DayCounter
1 Stockwik Förvaltning 131.25 0.074 131264420 NA <NA>
2 Novestra 37.14 7.200 605330 NA <NA>
3 Bactiguard Holding 29.55 14.250 2815572 NA <NA>
4 MSC Group B 20.87 3.070 671855 NA <NA>
5 NeuroVive Pharmaceutical 18.07 9.800 3280944 NA <NA>
6 Shelton Petroleum B 16.21 3.800 2135798 NA <NA>
Warning message:
In left_join_impl(x, y, by$x, by$y) :
joining factors with different levels, coercing to character vector
【问题讨论】:
-
我认为您可以通过
Firm加入,而不是通过所有列加入。如果您查看这些值,这些值在Gain.Month.1和其他列中不匹配。 -
公司不会自动加入 dplyr 吗?
-
不,您已经在
by语句中指定了列 -
警告是因为“公司”列是
factor,并且在两个数据集中具有不同的级别。您可以将该列转换为character类,不会有任何警告。即Avanza.XML <- Avanza.XML %>% mutate(Firm = as.character(Firm))和其他数据集类似,然后进行连接。