如何在R(Studio)中创建李克特量表的分组频率分布表

问题描述 投票:0回答:1

我有一个来自莱姆调查的数据集,其中包含来自李克特量表的不同变量/项目,其中一些变量取决于分组变量,例如:

问题A: 我参观了以下研讨会: [列表 8 个,选择其中一个]

  • 工作坊1《校园欺凌》
  • 工作坊2“线上教学”
  • ...
  • 工作坊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")

有什么想法吗?

r grouping likert
1个回答
0
投票

您可以

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")
  }
)

未测试,因为您没有提供示例数据。

© www.soinside.com 2019 - 2024. All rights reserved.