我希望left_join
通过dplyr
包提供两个表格。问题是为所有新列(我之后的那些列)生成NA
值。
如下所示,left_join
和NA
新列的Incep.Price
个DayCounter
值。为什么会发生这种情况,如何解决?
更新:感谢@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
答案 0 :(得分:1)
有两个问题。
未指定by
中的left_join
参数:在这种情况下,默认情况下,所有列都用作要加入的变量。如果我们查看列 - “Gain.Month.1”,“Last.Price”,“Vol.Month.1” - 所有numeric
类,并且每个数据集中没有匹配的值。所以,最好加入“坚定”
left_join(Avanza.XML, checkpoint, by = "Firm")
“公司”专栏类 - factor
:当levels
列的factor
存在差异时,我们会收到警告(如果它是我们加入的变量)通过)。为了删除警告,我们可以将两个数据集中的“公司”列转换为character
类
Avanza.XML$Firm <- as.character(Avanza.XML$Firm)
checkpoint$Firm <- as.character(checkpoint$Firm)
或者,如果我们仍希望将列保持为factor
,则更改“公司”中的levels
以包含两个数据集中的所有levels
lvls <- sort(unique(c(levels(Avanza.XML$Firm),
levels(checkpoint$Firm))))
Avanza.XML$Firm <- factor(Avanza.XML$Firm, levels=lvls)
checkpoint$Firm <- factor(checkpoint$Firm, levels=lvls)
然后执行left_join
。