在R中循环创建表列表

时间:2020-01-09 18:04:41

标签: r list loops formatting

我正在努力通过R中的循环创建表列表(对象=表,而不是data.frame)。 我的数据结构也有些复杂-有时表格功能不提供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 个答案:

答案 0 :(得分:1)

在将感兴趣的列转换为与lapply具有相同的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))