因子水平数不等的 R 中的李克特 [英] Likert in R with unequal number of factor levels

查看:43
本文介绍了因子水平数不等的 R 中的李克特的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些调查数据,可得出 5 点李克特量表.但是,在某些响应列中,缺少某些因素.数据如下:

I have some survey data leading to a 5-point likert scale. However, in some response columns, some factors are missing. Here is the data:

提高学生参与度,教学时间效率增加,增加学生的信心,提高学生的表现在课堂作业中,增加了学生的学习,增加了独特的学习活动

Increased student engagement ,Instructional time effectiveness increased,Increased student confidence,Increased student performance in class assignments,Increased learning of the students,Added unique learning activities

非常同意,非常同意,非常同意,非常同意,非常同意同意,非常同意

Strongly agree,Strongly agree,Strongly agree,Strongly agree,Strongly agree,Strongly agree

既不同意也不反对,既不同意也不反对,既不同意不同意,不同意,不同意,不同意不同意,既不同意也不反对

Neither agree nor disagree,Neither agree nor disagree,Neither agree nor disagree,Neither agree nor disagree,Neither agree nor disagree,Neither agree nor disagree

不同意,非常不同意,既不同意也不同意不同意,不同意,不同意,既不同意也不反对

Disagree,Strongly disagree,Neither agree nor disagree,Disagree,Disagree,Neither agree nor disagree

如您所见,某些响应列缺少一些因素,例如在第一列中,缺少同意和强烈不同意(为简单起见,我粘贴了实际数据集的一个子集)

As you can see, that some response columns have some missing factors, e.g. in first column, Agree, and Strongly disagree are missing (for simplicity, I have pasted a subset of the actual data set)

我在 R 中使用以下代码:

I am using the following code in R:

facultyData <- read_excel("FacultyResponsesForR.xlsx")
facultyData[] <- lapply( facultyData, factor)
facultyData[1:6] <- lapply( facultyData[1:6], factor, levels=1:5)
likertData <- likert(facultyData, nlevels = 5)
plot(likertData)

然而,这会导致以下错误:

However, this is leading to the following error:

Error in mean(as.numeric(items[, i]), na.rm = TRUE) : 
  (list) object cannot be coerced to type 'double'

我已经尝试了其他帖子中提到的解决方案(代码注释行 facultyData[] <- lapply(facultyData[], factor, levels=1:5)),但它也不起作用

I have tried the solution mentioned over other posts(the one in the commented line of code facultyData[] <- lapply(facultyData[], factor, levels=1:5)), but it doesn't work either

显然,在执行这个 lappy 之前,数据包含:

Apparently, before executing this lappy the data contains:

# A tibble: 14 × 1
   `Increased student engagement`
                           <fctr>
1                  Strongly agree
2                           Agree
3                           Agree
4                           Agree
5                           Agree
6                           Agree
7                           Agree
8                           Agree
9                           Agree
10     Neither agree nor disagree
11     Neither agree nor disagree
12     Neither agree nor disagree
13     Neither agree nor disagree
14                       Disagree

执行后数据会被 NA 值覆盖吗?为什么会发生这种情况?

After executing it data is overriden with NA values? Why is this happening?

> facultyData[1:6] <- lapply( facultyData[1:6], factor, levels=1:5)
> facultyData[,1]
# A tibble: 14 × 1
   `Increased student engagement`
                           <fctr>
1                              NA
2                              NA
3                              NA
4                              NA
5                              NA
6                              NA
7                              NA
8                              NA
9                              NA
10                             NA
11                             NA
12                             NA
13                             NA
14                             NA

如下修改代码后,数据被保留(没有变成NA,但我得到同样的错误)

After changing the code as follows, data is retained (doesn't become NA, yet I get the same error)

mylevels <- c('Strongly disagree', 'Disagree', 'Neither agree nor disagree', 'Agree', 'Strongly agree')
facultyData <- read_excel("FacultyResponsesForR.xlsx")
facultyData[] <- lapply( facultyData, factor)
facultyData[1:6] <- lapply( facultyData[1:6], factor, levels=mylevels)

这个解决方案对我不起作用 - https://github.com/jbryer/likert/blob/master/demo/UnusedLevels.R

This solution doesn't work for me - https://github.com/jbryer/likert/blob/master/demo/UnusedLevels.R

推荐答案

重写你的数据并不好玩,这需要一些时间来弄清楚,但我认为这会对你有所帮助.有人可能有更短的方法.如果有帮助,请告诉我.

Rewriting your data was no fun, and this took a bit to figure out but I think this will help you. Someone may have a shorter way. Let me know if it helps.

df <- rbind(c("Strongly agree","Strongly agree","Strongly agree","Strongly agree","Strongly agree","Strongly agree"),
            c("Neither agree nor disagree","Neither agree nor disagree","Neither agree nor disagree","Neither agree nor disagree","Neither agree nor disagree","Neither agree nor disagree"),
            c("Disagree","Strongly disagree","Neither agree nor disagree","Disagree","Disagree","Neither agree nor disagree"))
df <- as.data.frame(df)
colnames(df) <- c("Increased student engagement", "Instructional time effectiveness increased", "Increased student confidence", "Increased student performance in class assignments", "Increased learning of the students", "Added unique learning activities")

lookup <- data.frame(levels = 1:5, mylabels = c('Strongly disagree', 'Disagree', 'Neither agree nor disagree', 'Agree', 'Strongly agree'))

df.1 <- as.data.frame(apply(df, 2, function(x) match(x, lookup$mylabels)))
df.new <- as.data.frame(lapply(as.list(df.1), factor, levels = lookup$levels, labels = lookup$mylabels))

str(df.new)
'data.frame':   3 obs. of  6 variables:
 $ Increased.student.engagement                      : Factor w/ 5 levels "Strongly disagree",..: 5 3 2
 $ Instructional.time.effectiveness.increased        : Factor w/ 5 levels "Strongly disagree",..: 5 3 1
 $ Increased.student.confidence                      : Factor w/ 5 levels "Strongly disagree",..: 5 3 3
 $ Increased.student.performance.in.class.assignments: Factor w/ 5 levels "Strongly disagree",..: 5 3 2
 $ Increased.learning.of.the.students                : Factor w/ 5 levels "Strongly disagree",..: 5 3 2
 $ Added.unique.learning.activities                  : Factor w/ 5 levels "Strongly disagree",..: 5 3 3

这篇关于因子水平数不等的 R 中的李克特的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆