Создайте кросс-таблицу в R, используя tab_cells, которая показывает значения NA
Я пытаюсь создать набор кросс-таблиц в R, используя tab_cells
команда в expss
пакет, который показывает мне количество, общее и мои NA. Я не могу получить это, чтобы дать мне NA.
Я пытался использовать na_if
а также tab_mis_val
и я попытался сделать это с помощью команды cro. Я нашел таблицу частот, которая мне действительно нравится использовать fre, и я хочу воспроизвести ее в основном как кросс-таблицу. Я также использовал tabyl
от janitor
пакет и может получить строку NA, но я могу запустить только одну кросс-таблицу за раз вместо того, чтобы сказать от var1 до var10.
#I feel like I'm close with this
data%>%
tab_cells(var1 %to% var10) %>%
tab_cols(total(), var12) %>%
tab_stat_cpct() %>%
tab_mis_val() %>%
tab_pivot()
#frequency table I really like that DOES give me NAs
expss_output_viewer()
calculate(data, fre(as.list(var1 %to% var10)))
#attempt to make it as a crosstab
expss_output_viewer()
calculate(data, cro_cases(as.list(var1 %to% var10, var12)))
#Using tabyl I can get NAs but it will only give one one crosstab at a
# time instead of a` whole set of them.
library(janitor)
data %>%
tabyl(var1, var12) %>%
adorn_totals(c("row", "col")) %>%
adorn_percentages("row") %>%
adorn_pct_formatting() %>%
adorn_ns() %>%
adorn_title("combined") %>%
knitr::kable()
Я хочу таблицу с подсчетами, процентами, итоговой строкой и строкой NA. Я не могу, кажется, получить ряд АН с tab_cells
,
1 ответ
if_na
должен сделать трюк:
data%>%
tab_cells(
add_val_lab(if_na(var1 %to% var10, 999), c("<NA>" = 999))
) %>%
tab_cols(total(), var12) %>%
tab_stat_cpct() %>%
tab_pivot()
Да, это довольно многословно, и я собираюсь упростить это в будущем expss
версии. Если вы не используете метки значений, вы можете отказаться add_val_lab
функция. if_na(var1 %to% var10, '<NA>')
будет достаточно. ОБНОВЛЕНИЕ 21.05
Код с процентами по итогу:
library(expss)
data(mtcars)
mtcars = apply_labels(mtcars,
mpg = "Miles/(US) gallon",
cyl = "Number of cylinders",
disp = "Displacement (cu.in.)",
hp = "Gross horsepower",
drat = "Rear axle ratio",
wt = "Weight (lb/1000)",
qsec = "1/4 mile time",
vs = "Engine",
vs = c("V-engine" = 0,
"Straight engine" = 1),
am = "Transmission",
am = c("Automatic" = 0,
"Manual"=1),
gear = "Number of forward gears",
carb = "Number of carburetors"
)
# create function which calculate single table with NA percent under the total
tab_with_na = function(x, weight = NULL) {
rbind(
cro_cpct(
list(unvr(x)), # list(unvr()) to completely drop variable labels
col_vars = "|",
weight = weight),
# calculate percent of NA
cro_mean(
list("<NA>" = unvr(is.na(x)*100)), # list(unvr()) to completely drop variable labels
col_vars = "|",
weight = weight)
)
}
mtcars %>%
tab_cells(am %to% carb) %>%
tab_cols(total(), vs) %>%
tab_stat_fun(tab_with_na) %>%
tab_pivot()