我需要跨多个变量创建多个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,它将很有效,除了它仅适用于频率表,而且我不确定如何适应这种情况,并且我的观点不足以发表评论。
在此先感谢您的帮助!
答案 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"))