[英]dplyr::left_join produce NA values for new joined columns
我有兩個表我想left_join
通過dplyr
包。 問題是為所有新列(我要處理的列)生成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
有兩個問題。
在left_join
未指定by
參數:在這種情況下,默認情況下,所有列均用作要通過by left_join
的變量。 如果我們查看列-“ Gain.Month.1”,“ Last.Price”,“ Vol.Month.1”-所有numeric
類,並且在每個數據集中沒有匹配值。 因此,最好通過“固定”加入
left_join(Avanza.XML, checkpoint, by = "Firm")
“固定”列類factor
:當factor
列的levels
存在差異時(如果它是我們加入的變量),我們會收到警告。 為了消除警告,我們可以將兩個數據集中的“固定”列轉換為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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.