【问题标题】:Make 'NA' columns of a specific 'type' in dplyr在 dplyr 中创建特定“类型”的“NA”列
【发布时间】: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)

标签: r dplyr na tidyverse


【解决方案1】:

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

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

【讨论】:

  • ARG!抱歉,我使用的是 dplyr::0.4.3;总结在 dplyr::0.7 中工作正常。感谢您的帮助。
猜你喜欢
  • 2016-04-04
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
相关资源
最近更新 更多