Как создать вложенную таблицу в R
Я изо всех сил пытаюсь выяснить, как создать следующую таблицу;
используя следующий набор данных
```{r}
df<-data.frame(ID=c(1,2,3,4,5,6),
Treat_Cont = c("Treatment", "Treatment", "Treatment", "Control", "Control", "Control"),
Q1 = c("Yes", "No", NA, "Yes", "No", NA),
Q2 = c("Yes", "No", NA, "Yes", "No", NA)
)
```
Основная проблема у меня была с использованием table()
, expss
пакет или tables
Пакет заключается в том, что они обрабатывают каждый уровень фактора отдельно, поэтому таблица будет производить подсчет, например, для; Treat_Control == Treatment & Q1 == Yes & Q2 == Yes
,
В настоящее время я нахожусь на этапе, когда я не уверен, является ли моя проблема одной из структур данных, то есть я должен изменить свой набор данных, или мне не хватает функции или аргумента для достижения этого результата.
Спасибо,
1 ответ
Решение
Решение с expss. Не очень содержательный код, на мой взгляд:
library(expss)
df = data.frame(ID=c(1,2,3,4,5,6),
Treat_Cont = c("Treatment", "Treatment", "Treatment", "Control", "Control", "Control"),
Q1 = c("Yes", "No", NA, "Yes", "No", NA),
Q2 = c("Yes", "No", NA, "Yes", "No", NA)
)
df %>%
tab_total_row_position("none") %>% # suppress totals
tab_rows("|" = Treat_Cont) %>% # "|" suppress var. labels
tab_cols(total(label = "|")) %>% # "|" suppress var. labels
# if_na add values for NA
tab_cells("|" = if_na(Q1, "<NA>")) %>% # "|" suppress var. labels
tab_stat_cases(label = "Q1") %>% # calculate stats
tab_cells("|" = if_na(Q1, "<NA>")) %>% # "|" suppress var. labels
tab_stat_cases(label = "Q2") %>% # calculate stats
tab_pivot(stat_position = "inside_columns") %>% # labels reposition
tab_transpose() # transpose table
ОБНОВЛЕНИЕ: более короткое решение.
df %>%
calculate(
cro(Treat_Cont %nest% if_na(Q1, "<NA>"), list("Q1"), total_row_position = "none") %merge%
cro(Treat_Cont %nest% if_na(Q2, "<NA>"), list("Q2"), total_row_position = "none")
) %>%
tab_transpose()
Краткое решение с основанием R:
with(df,
rbind(
"Q1" = table(Treat_Cont:addNA(Q1)),
"Q2" = table(Treat_Cont:addNA(Q2))
))