Я хотел бы сделать кросс-вкладку в R, используя dplyr
. У меня есть веские причины не просто использовать базовую команду table()
.dplyr cross tab с отсутствующими значениями
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")
. Какие-нибудь советы?
Могли бы вы просто заменить НО значащими ярлыками, такими как «cyl.NA». –
Я полагаю, но перекрестные вкладки обычно исследуются сами по себе. Изучение того, как вы должны исследовать, кажется утомительным. Но, возможно, это необходимо. – gregmacfarlane
Создайте минимальный воспроизводимый отчет об ошибках в реестре tidyr? – hadley