在 dplyr 中创建特定 'type' 的 'NA' 列
Make 'NA' columns of a specific 'type' in dplyr
我正在制作一个函数来汇总 dplyr 中的列。在由 group_by
定义的组内:如果列中的值是某个常量 k,则该组的汇总值应为 k
,但如果列为非常量,则该值应为 NA。
理想情况下,我想将 NA 转换为输入列的 class;因此,如果它是数字列,则汇总函数 returns 相当于 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)))
returns
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
...以便汇总列与输入列相同class。
请忽略此问题。我使用的是较早版本的 dplyr(v0.4.3;当前在 CRAN 上为 0.7.4);问题已解决。
使用 summarize_at
似乎保留了类型,例如:
DF %>%
group_by(x) %>%
summarise_at(c("y", "z"), funs(as(NA, class(.))))
我正在制作一个函数来汇总 dplyr 中的列。在由 group_by
定义的组内:如果列中的值是某个常量 k,则该组的汇总值应为 k
,但如果列为非常量,则该值应为 NA。
理想情况下,我想将 NA 转换为输入列的 class;因此,如果它是数字列,则汇总函数 returns 相当于 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)))
returns
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
...以便汇总列与输入列相同class。
请忽略此问题。我使用的是较早版本的 dplyr(v0.4.3;当前在 CRAN 上为 0.7.4);问题已解决。
使用 summarize_at
似乎保留了类型,例如:
DF %>%
group_by(x) %>%
summarise_at(c("y", "z"), funs(as(NA, class(.))))