Создать список таблиц по l oop в R - PullRequest
2 голосов
/ 09 января 2020

Я изо всех сил пытаюсь создать список таблиц (объект = таблица, а не data.frame) по l oop в R. Структура моих данных также немного сложна - иногда табличная функция не дает таблицы 2x2 - как автоматически заполнять таблицы с неполными измерениями до 2x2 ?

Пример данных (в реальном наборе данных намного больше ...)

my.data <- data.frame(y.var = c(0,1,0,1,1,1,0,1,1,0),
                      sex = rep(c("male","female"), times = 5),
                      apple = c(0,1,1,0,0,0,1,0,0,0),
                      orange = c(1,0,1,1,0,1,1,1,0,0),
                      ananas = c(0,0,0,0,0,0,0,0,0,0))


#    y.var    sex apple orange ananas
# 1      0   male     0      1      0
# 2      1 female     1      0      0
# 3      0   male     1      1      1

Посмотрите на создание таблиц - для яблока у меня есть хорошие 2x2 таблицы

table(my.data$y.var, my.data$apple)
#     0 1
#   0 2 2
#   1 5 1        .... Ok, nice 2x2 table.
table(my.data$y.var, my.data$apple, my.data$sex)
# , ,  = female
#     0 1
#   0 1 0
#   1 3 1
# , ,  = male
#     0 1
#   0 1 2
#   1 2 0        .... Ok, nice 2x2 table.

Однако для ананаса у меня есть только 2x1 таблицы

table(my.data$y.var, my.data$ananas)
#     0                                                 #     0 1
#   0 4                                                 #   0 4 0
#   1 6        .... NOT Ok! I need 2x2 table like this: #   1 6 0
table(my.data$y.var, my.data$ananas, my.data$sex)
# , ,  = female
#     0                                                 #     0 1
#   0 1                                                 #   0 1 0
#   1 4        .... NOT Ok! I need 2x2 table like this: #   1 4 0
# , ,  = male
#     0                                                 #     0 1
#   0 3                                                 #   0 3 0
#   1 2        .... NOT Ok! I need 2x2 table like this: #   1 2 0

Я могу сделать список вручную но это не очень практично.

my.list <- list(table(my.data$y.var, my.data$apple),
             table(my.data$y.var, my.data$apple, my.data$sex),
             table(my.data$y.var, my.data$orange),
             table(my.data$y.var, my.data$orange, my.data$sex),
             table(my.data$y.var, my.data$ananas),
             table(my.data$y.var, my.data$ananas, my.data$sex))

Как сделать самокорректирующуюся таблицу-размеры-1 oop? Необходим для следующих анализов ...

1 Ответ

1 голос
/ 09 января 2020

Мы можем использовать от lapply до l oop над списком столбцов после преобразования представляющих интерес столбцов, чтобы иметь те же levels с factor, а затем сделать table и сохранить вывод в list

my.data[-2] <- lapply(my.data[-2], factor, levels = 0:1)
lst1 <- lapply(my.data[3:5], function(x) table(my.data$y.var, x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...