如何在R中的子组之间聚合Likert类型的量表?

如何在R中的子组之间聚合Likert类型的量表?,r,aggregate,R,Aggregate,我试图在Likert型量表问卷上汇总各亚组特定回答选项(在本例中为选项4和5)的累积比例 通过这种方式,我将获得每个分组在问题上的平均支持率(在本例中,选项4和5对应于量表上的“同意”和“强烈同意”) 我在下面的文章中为每个单独的项目找到了一种方法,但是我想看看是否可以通过创建一个函数来简化它,该函数可以自动对所有项目执行相同的操作。我实际使用的数据集有99个项目,您可以看到,为每个项目重复相同的代码可能会变得很痛苦 在这个可复制的示例中,我的数据集有两个问题,分别名为“Q1”和“Q2”(每个问

我试图在Likert型量表问卷上汇总各亚组特定回答选项(在本例中为选项4和5)的累积比例

通过这种方式,我将获得每个分组在问题上的平均支持率(在本例中,选项4和5对应于量表上的“同意”和“强烈同意”)

我在下面的文章中为每个单独的项目找到了一种方法,但是我想看看是否可以通过创建一个函数来简化它,该函数可以自动对所有项目执行相同的操作。我实际使用的数据集有99个项目,您可以看到,为每个项目重复相同的代码可能会变得很痛苦

在这个可复制的示例中,我的数据集有两个问题,分别名为“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)
#创建数据集和汇总变量
种子集(8302019)

dataset您只需从
dplyr
使用
case\u when()

库(dplyr)
数据集%>%
在(.vars=c(“Q1”、“Q2”和…)处进行变异,.funs=funs(.=case\u,当(
. < 5 ~ 0,
. >= 5 ~ 1
)))

.vars选择可以通过示例中的命名向量或按位置选择(例如,
.vars=2:10

您好,欢迎使用堆栈溢出!请将您的代码减少到最低限度,以便在粘贴副本时再现您的问题?不要忘记数据;)