【发布时间】:2017-11-30 12:56:04
【问题描述】:
我正在创建一个函数来汇总 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);问题已解决。
【问题讨论】:
-
?NA注意您可以使用NA_integer_、NA_real_、NA_complex_和NA_character_。分别用于整数、数字、复数和字符类。 -
我知道,但是要动态构造特定类型的 NA,我使用
as(NA, type_name)