我正在编写一个函数来汇总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);这个问题已经解决了。
答案 0 :(得分:2)
使用summarize_at
似乎保留了类型,例如:
DF %>%
group_by(x) %>%
summarise_at(c("y", "z"), funs(as(NA, class(.))))