【发布时间】:2019-09-19 02:17:27
【问题描述】:
我正在尝试在李克特式量表问卷上汇总子组的特定响应选项(在本例中为选择 4 和 5)的累积比例。
这样,我将获得每个问题子组的平均好感度(在这种情况下,选项 4 和 5 对应于量表上的“同意”和“非常同意”)。
我已经为每个单独的项目找到了一种方法,关注这篇文章How to calculate cumulative proportion of Likert-type responses in r?,但是我想看看我是否可以通过创建一个自动为所有人做同样事情的函数来进一步简化它项目。我实际使用的数据集有 99 个项目,您可以看到,为每个项目重复相同的代码会变得很痛苦。
在可复制示例中,我的数据集有 2 个名为“Q1”和“Q2”的问题(每个问题都采用 5 分制)和名为“subgroup”的子组代码。 “some_num_col”只是一个作为锚点创建的变量,用于为聚合函数生成计数。创建“A-rollup”变量是为了重新编码属于某些汇总的观察结果。
# Creating the dataset and rollups variable
set.seed(8302019)
dataset <- data.frame(
subgroup = sample(c(1000,1005,807,886,779,458,557,628), 500, replace=TRUE),
Q1 = sample(1:5, 500, replace=TRUE), Q2 = sample(1:5, 500, replace =TRUE),
some_num_col = 1
)
str(dataset)
dataset$A_rollup <- with(dataset,ifelse(subgroup %in% c(1005,1000),1,ifelse(subgroup %in% c(807),2,ifelse(subgroup %in% c(886,779,458),3,ifelse(subgroup %in% c(557,628),4,"N/A")))))
# Aggregate Q1
agg_Q1 <- aggregate(cbind(count=some_num_col) ~ Q1 + A_rollup, dataset, FUN=length)
agg_Q1$prop <- with(agg_Q1, count / ave(count, A_rollup, FUN=sum))
filtered <- agg_Q1[agg_Q1$Q1 %in% c(4,5),]
Final_Q1 <- aggregate(filtered$prop, by=list(filtered$A_rollup), FUN=sum, na.rm=T)
names(Final_Q1) <- c("A_rollup", "Q1.Fav")
remove(filtered,agg_Q1)
# Aggregate Q2
agg_Q2 <- aggregate(cbind(count=some_num_col) ~ Q2 + A_rollup, dataset, FUN=length)
agg_Q2$prop <- with(agg_Q2, count / ave(count, A_rollup, FUN=sum))
filtered <- agg_Q2[agg_Q2$Q2 %in% c(4,5),]
Final_Q2 <- aggregate(filtered$prop, by=list(filtered$A_rollup), FUN=sum, na.rm=T)
names(Final_Q2) <- c("A_rollup", "Q2.Fav")
remove(filtered,agg_Q2)
# Binding the aggregates
Final <- cbind(Final_Q1, Final_Q2$Q2.Fav)
【问题讨论】:
-
嗨,欢迎来到 Stack Overflow!您能否将您的代码减少到在复制粘贴时重现您的问题的最低限度?不要忘记数据;)