我有一个来自莱姆调查的数据集,其中包含来自李克特量表的不同变量/项目,其中一些变量取决于分组变量,例如:
问题A: 我参观了以下研讨会: [列表 8 个,选择其中一个]
问题B: [likert 项目有 4 个选项“是 (++)、更多是 (+)、更多否 (-)、否 (--)”]
我找到了一种从“问题 B”创建项目表的方法 - 我的问题是: 如何为“问题 A”中的每个因素水平创建这样一个表格?
现在我想为每个研讨会创建一个结果表。
(预期表:) 结果研讨会 1:
项目 | 是的(++) | 更多的是(+) | 更没有(-) | 没有(--) |
---|---|---|---|---|
1.我喜欢这个研讨会。 | 10 | 5 | 1 | 1 |
2.我学到了很多东西。 | 5 | 10 | 2 | 0 |
3.老师太棒了。 | 1 | 10 | 5 | 1 |
4.我需要更多的意见。 | 1 | 1 | 10 | 5 |
5.给定的材料很有用。 | 10 | 1 | 5 | 1 |
结果研讨会2:
项目 | 是的(++) | 更多的是(+) | 更没有(-) | 没有(--) |
---|---|---|---|---|
1.我喜欢这个研讨会。 | 20 | 7 | 3 | 1 |
2.我学到了很多东西。 | 5 | 22 | 2 | 0 |
3.老师太棒了。 | 1 | 11 | 4 | 1 |
4.我需要更多的意见。 | 0 | 1 | 13 | 5 |
5.给定的材料很有用。 | 17 | 1 | 4 | 1 |
library("likert")
library("grid")
library('unikn')
library(tidyverse)
library(kableExtra)
library(knitr)
library(tinytex)
library(crosstable)
library(ggplot2)
library(data.table)
library(xtable)
library(flextable)
library(plyr)
data <- read.csv("C:/Users/.../survey_515378_R_data_file.csv", quote = "'\"", na.strings=c("", "\"\""), stringsAsFactors=FALSE, fileEncoding="UTF-8-BOM")
# LimeSurvey Field type: A
data[, 18] <- as.character(data[, 18])
attributes(data)$variable.labels[18] <- "I visited the following workshop:"
data[, 18] <- factor(data[, 18], levels=c("1","2","3","4","5","6","7","8"),labels=c("Workshop 1", "Workshop 2", "Workshop 3", "..."))
names(data)[18] <- "Workshop"
# LimeSurvey Field type: F
data[, 20] <- as.numeric(data[, 20])
attributes(data)$variable.labels[20] <- "I liked the workshop."
data[, 20] <- factor(data[, 20], levels=c(0,1,2,3),labels=c("no\n(--)", "more no\n(-)", "more yes\n(+)", "yes\n(++)"))
names(data)[20] <- "I liked the workshop."
使用以下代码,我创建了没有问题 A 中的分组变量的表
W <- mapply(table, data[, 20:24]); W
W <- t(W)
W <- round((W/rowSums(W))*100,0)
W2 <- as.data.frame(W) %>%
tibble::rownames_to_column("Results Workshop")
TableW <- flextable(W2) %>%
width(j = 1, width = 12, unit = "cm") %>% width(j = 2:5, width = 1, unit = "cm")
theme_zebra(TableW, odd_header = "#87ceeb", odd_body = "transparent", even_header = "transparent", even_body = "#d1eeee")
有什么想法吗?
您可以
split()
参加研讨会的数据并循环查看结果,例如:
# ...
W2 <- as.data.frame(W) %>%
tibble::rownames_to_column("Results Workshop")
Tables <- lapply(
split(W2, W2$WorkshopAttended),
\(W2a) {
TableWa <- flextable(W2a) %>%
width(j = 1, width = 12, unit = "cm") %>%
width(j = 2:5, width = 1, unit = "cm")
theme_zebra(TableWa, odd_header = "#87ceeb", odd_body = "transparent", even_header = "transparent", even_body = "#d1eeee")
}
)
未测试,因为您没有提供示例数据。