创建多个2x2表

时间:2018-11-19 19:11:16

标签: r

我需要跨多个变量创建多个2x2表。

样本数据:

Month <- c("Jan", "Feb", "March", "April")
Quiz1 <- c("90", "80", "100", "70")
Quiz2 <- c("100", "70", "50", "20")
Quiz3 <- c("60", "35", "26", "80")

df <- data.frame(Month, Quiz1, Quiz2, Quiz3)

我想做的是按月获得每个测验的2x2,然后将其保存在csv中,这样我就可以在excel中创建条形图-饼图等,并且它们需要与非R一起分发用户。可以是相同的CSV,也可以是多个。这就是我一直在做的方式(有近20项测验),但是我知道必须有一种更有效的方法。

Quiz1 <- table(df$Month, df$Quiz1)
Quiz2 <- table(df$Month, df$Quiz2)
Quiz3 <- table(df$Month, df$Quiz3)

write.csv(Quiz1, "filepath...")
write.csv(Quiz2, "filepath...")
write.csv(Quiz3, "filepath...")

我找到了这个答案:loop for tabulation of variables in data frame,它将很有效,除了它仅适用于频率表,而且我不确定如何适应这种情况,并且我的观点不足以发表评论。

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我们可以使用lapply来遍历“月”列以外的列,然后使用循环列来获取“月”的table。输出将是list个表

lst <- lapply(df[-1], function(x) table(df$Month, x))
names(lst) <- paste0("Quiz", seq_along(lst))

使用单个list代替创建多个全局变量。转换后,然后使用write.csv写入不同的文件

lapply(names(lst), function(x) write.csv(lst[[x]], file = paste0(x, ".csv"))