制作' NA'特定类型的列'在dplyr

时间:2017-11-30 12:56:04

标签: r dplyr na tidyverse

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

理想情况下,我想将NA转换为输入列的类;因此,如果它是一个数字列,则摘要函数将返回等效的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)))

返回

  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

...以便汇总列与输入列属于同一类。

请忽略这个问题。我使用的是早期版本的dplyr(v0.4.3; CRAN上的电流为0.7.4);这个问题已经解决了。

1 个答案:

答案 0 :(得分:2)

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

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