簡體   English   中英

dplyr :: left_join為新的連接列產生NA值

[英]dplyr::left_join produce NA values for new joined columns

我有兩個表我想left_join通過dplyr包。 問題是為所有新列(我要處理的列)生成NA值。

如下所示, left_join會為Incep.PriceDayCounter的新列提供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

有兩個問題。

  1. left_join未指定by參數:在這種情況下,默認情況下,所有列均用作要通過by left_join的變量。 如果我們查看列-“ Gain.Month.1”,“ Last.Price”,“ Vol.Month.1”-所有numeric類,並且在每個數據集中沒有匹配值。 因此,最好通過“固定”加入

     left_join(Avanza.XML, checkpoint, by = "Firm") 
  2. “固定”列類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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM