制作';NA';特定';类型';在dplyr中

制作';NA';特定';类型';在dplyr中,r,dplyr,na,tidyverse,R,Dplyr,Na,Tidyverse,我正在制作一个函数来总结dplyr中的列。在由group\u by定义的组内:如果列中的值为常数k,则该组的汇总值应为k,但如果列为非常数,则该值应为NA 理想情况下,我希望将NA转换为输入列的类;因此,如果它是一个数字列,summary函数将的等效值返回为(NA,“numeric”) 为了实现上述目标,我编写了一个函数。collapse\u if\u constant;但为了简单起见,我只想解决如何在dplyr中生成指定类型的NA列 让 返回 x y z (fctr)

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

理想情况下,我希望将NA转换为输入列的类;因此,如果它是一个数字列,summary函数将
的等效值返回为(NA,“numeric”)

为了实现上述目标,我编写了一个函数
。collapse\u if\u constant
;但为了简单起见,我只想解决如何在dplyr中生成指定类型的NA列

返回

  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);此问题已解决。

使用
summary\u at
似乎保留了该类型,例如:

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

?NA
注意,您可以使用
NA_整数
NA_实数
NA_复数
NA_字符
。分别用于整数、数字、复数和字符类。我知道,但要动态构造特定类型的NA,我使用
as(NA,type\u name)
ARG!抱歉,我使用的是dplyr::0.4.3;总结dplyr::0.7中的优秀工作。谢谢你的帮助。
tibble::tibble(x = factor("A"), y = as(NA, "numeric"), z = NA)
  x      y     z
  (fctr) (dbl) (lgl)
1 A       NA    NA
DF %>%
  group_by(x) %>%
  summarise_at(c("y", "z"), funs(as(NA, class(.))))