在 dplyr 中创建特定 'type' 的 'NA' 列

Make 'NA' columns of a specific 'type' in dplyr

我正在制作一个函数来汇总 dplyr 中的列。在由 group_by 定义的组内:如果列中的值是某个常量 k,则该组的汇总值应为 k,但如果列为非常量,则该值应为 NA。

理想情况下,我想将 NA 转换为输入列的 class;因此,如果它是数字列,则汇总函数 returns 相当于 as(NA, "numeric").

为了完成上述工作,我编写了一个函数.collapse_if_constant;但是为了简单起见,我只想弄清楚如何在 dplyr 中制作指定类型的 NA 列。

DF <- data.frame(x = "A", y = 1:3, z = c(TRUE, FALSE, TRUE))

然后

DF %>%
  group_by(x) %>%
  summarise(y = as(NA, class(y)), z = as(NA, class(z)))

returns

  x      y     z
  (fctr) (lgl) (lgl)
1 A       NA    NA

但是,我希望它看起来像

tibble::tibble(x = factor("A"), y = as(NA, "numeric"), z = NA)
  x      y     z
  (fctr) (dbl) (lgl)
1 A       NA    NA

...以便汇总列与输入列相同class。


请忽略此问题。我使用的是较早版本的 dplyr(v0.4.3;当前在 CRAN 上为 0.7.4);问题已解决。

使用 summarize_at 似乎保留了类型,例如:

DF %>%
  group_by(x) %>%
  summarise_at(c("y", "z"), funs(as(NA, class(.))))