gpt4 book ai didi

r - dplyr::left_join 为新连接的列生成 NA 值

转载 作者:行者123 更新时间:2023-12-04 13:45:39 40 4
gpt4 key购买 nike

我有两张 table 想要left_join通过 dplyr包裹。问题是产生 NA所有新列的值(我追求的那些)。

正如您在下面看到的,left_join产品NA Incep.Price 新列的值和 DayCounter .为什么会发生这种情况,如何解决?

更新:感谢@akrun,使用 left_join(Avanza.XML, checkpoint, by = c('Firm' = 'Firm'))解决了问题并且列正确连接。

但是警告信息是一样的,有人可以解释这种行为吗?为什么在这种情况下必须明确指定 join列,或以其他方式生成 NA值(value)观?

> 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

最佳答案

有两个问题。

  • 未指定 by参数在 left_join : 在这种情况下,默认情况下所有列都用作要加入的变量。如果我们查看列 - “Gain.Month.1”、“Last.Price”、“Vol.Month.1” - 所有 numeric类并且在每个数据集中没有匹配的值。所以,最好通过“公司”加入
    left_join(Avanza.XML, checkpoint, by = "Firm")
  • “公司”列类 - factor :当 levels 存在差异时,我们会收到警告的factor列(如果它是我们加入的变量)。为了消除警告,我们可以将两个数据集中的“Firm”列转换为 character类(class)
    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 .

    关于r - dplyr::left_join 为新连接的列生成 NA 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35016377/

    40 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com