gpt4 book ai didi

r - 带有缺失值的 dplyr 交叉表

转载 作者:行者123 更新时间:2023-12-04 07:21:11 25 4
gpt4 key购买 nike

我想使用 dplyr 在 R 中创建一个交叉表.我有充分的理由不只是使用基础 table()命令。

table(mtcars$cyl, mtcars$gear)
3 4 5
4 1 8 2
6 2 4 1
8 12 0 2

library(dplyr)
library(tidyr)
mtcars %>%
group_by(cyl, gear) %>%
tally() %>%
spread(gear, n, fill = 0)
Source: local data frame [3 x 4]

cyl 3 4 5
1 4 1 8 2
2 6 2 4 1
3 8 12 0 2

这一切都很好。但是当 group_by() 中存在缺失值时,它似乎会崩溃。变量。
mtcars %>%
mutate(
cyl = ifelse(cyl > 6, NA, cyl),
gear = ifelse(gear > 4, NA, gear)
) %>%
group_by(cyl, gear) %>%
tally()
Source: local data frame [8 x 3]
Groups: cyl

cyl gear n
1 4 3 1
2 4 4 8
3 4 NA 2
4 6 3 2
5 6 4 4
6 6 NA 1
7 NA 3 12
8 NA NA 2

# DITTO # %>%
spread(gear, n)
Error in if (any(names2(x) == "")) { :
missing value where TRUE/FALSE needed

我想我想要的是 NA专栏喜欢你做的时候 table(..., useNA = "always") .有小费吗?

最佳答案

一种选择是更换 NA s 带有标签。这可以通过 mutate_each 轻松完成。 :

mtcars %>%
mutate(
cyl = ifelse(cyl > 6, NA, cyl),
gear = ifelse(gear > 4, NA, gear)
) %>%
group_by(cyl, gear) %>%
tally() %>%
ungroup() %>%
mutate_each(funs(replace(., is.na(.), 'missing'))) %>%
spread(gear, n)

# cyl 3 4 missing
# 1 4 1 8 2
# 2 6 2 4 1
# 3 missing 12 NA 2

关于r - 带有缺失值的 dplyr 交叉表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29108431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com