为什么R中的coalesce()为我返回额外的值?

时间:2018-10-07 14:23:45

标签: r dplyr purrr

我正在尝试使用coalesce()。示例数据集如下所示(可重复的代码在其下):

    Country X2016 X2017 X2018
1 Australia    10    NA    12
2        UK    15    20    NA
3       USA    NA    40    NA

当我以这种形式传递两个向量时:coalesce(df$X2018, df$X2017),它工作正常。

但是当我将向量作为df[4], df[3]输入时,我得到了意外的额外值。

下面的可复制示例:

library(tidyverse)

df <- data.frame(stringsAsFactors=FALSE,
                 Country = c("Australia", "UK", "USA"),
                 X2016 = c(10L, 15L, NA),
                 X2017 = c(NA, 20L, 40L),
                 X2018 = c(12L, NA, NA)
)
df
coalesce(df$X2018, df$X2017)
coalesce(df[4], df[3])

所以coalesce(df$X2018, df$X2017)返回:

[1] 12 20 40

这是预期的。

我不明白为什么coalesce(df[4], df[3])返回:

       X2018
1         12
2 NA, 20, 40
3 NA, 20, 40

我不知道为什么它返回前两列。

1 个答案:

答案 0 :(得分:3)

使用df[4]时,实际上是在指数据框(或更普遍地说,是列表)。这就是摆脱coalesce函数的原因。您可能打算这样做:

coalesce(df[[4]], df[[3]])

关于为什么,您正在查看当前输出,我们可能必须研究coalesce的确切实现。