2017-04-27 5 views
0

Ich habe einige Umfragedaten, die zu einer 5-Punkte-Likert-Skala führen. In einigen Antwortspalten fehlen jedoch einige Faktoren. Hier sind die Daten:Likert in R mit ungleicher Anzahl von Faktorstufen

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

Wie Sie sehen können, haben einige Antwortspalten einige fehlende Faktoren, z. in dem ersten Spalte, stimmt zu, und mit Nachdruck fehlt nicht einverstanden (die Einfachheit halber habe ich eine Teilmenge der tatsächlichen Datensatz eingefügt)

ich den folgenden Code in R verwenden:

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) 

Dies ist jedoch was zu dem folgenden Fehler:

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

ich die Lösung gegenüber anderen Stellen (der in der kommentierten Codezeile facultyData[] <- lapply(facultyData[], factor, levels=1:5)) erwähnt versucht, aber es funktioniert auch nicht

Offenbar bevor diese lappy Ausführung der Daten enthält:

# 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 

Nachdem Daten Ausführung mit NA-Werte außer Kraft gesetzt wird? Warum passiert dies?

> 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 

Nach dem Ändern des Codes wie folgt, Daten beibehalten wird (nicht NA nicht geworden, aber ich erhalte die gleiche Störung)

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) 

Diese Lösung für mich nicht funktioniert - https://github.com/jbryer/likert/blob/master/demo/UnusedLevels.R

Antwort

2

Das Umschreiben Ihrer Daten war kein Spaß, und das hat ein bisschen gedauert, aber ich denke, das wird Ihnen helfen. Jemand könnte einen kürzeren Weg haben. Lass es mich wissen, wenn es hilft.

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 
+0

Ich fand heraus, dass das Hauptproblem mit der 'read_excel' Funktion ist. Ich habe 'fakultyData <- read.csv ('FacultyResponsesForR.csv', colClasses = c ('Faktor', 'Faktor', 'Faktor', 'Faktor', 'Faktor', 'Faktor'))' und es hat gut funktioniert . – vipin8169

+0

Froh, dass du es herausgefunden hast –

+0

Danke für die Hilfe :) – vipin8169

2

Ich habe eine Excel-Datei mit Ihren Beispieldaten erstellt. Lesen dies mit read_excel gibt ein Ergebnis als

folgt
library(readxl) 
dat <- read_excel("factor_labels.xlsx") 
dat 
#> # A tibble: 3 × 6 
#> `Increased student engagement` 
#>       <chr> 
#> 1     Strongly agree 
#> 2  Neither agree nor disagree 
#> 3      Disagree 
#> # ... with 5 more variables: `Instructional time effectiveness 
#> # increased` <chr>, `Increased student confidence` <chr>, `Increased 
#> # student performance in class assignments` <chr>, `Increased learning 
#> # of the students` <chr>, `Added unique learning activities` <chr> 

Sie haben Recht, dass read_excel keine Zeichengrößen Faktoren konvertiert - dies ist gewollt, da es oft unnötig oder unangemessen Zeichenvariablen als kategorische zu behandeln. Selbst wenn wir in einen Faktor konvertieren möchten, ist es eine gute Übung, dies explizit zu tun, um sicherzustellen, dass die Faktoren in der richtigen Reihenfolge die richtigen Ebenen haben (standardmäßig wird der Faktor mit den in der Variablen vorhandenen Ebenen alphabetisch sortiert). Manchmal möchten wir vielleicht kompliziertere Dinge wie das Umbenennen von Ebenen oder das Umgruppieren von Ebenen machen, aber hier wollen wir die Ebenen nicht ändern, sondern nur die ganze Menge von Ebenen angeben. Eine Möglichkeit, die erforderlichen Faktoren zu schaffen, ist mit mutate_all von dplyr

mylevels <- c("Strongly disagree", "Disagree", "Neither agree nor disagree", 
    "Agree", "Strongly agree") 

library(dplyr) 
#> 
#> Attaching package: 'dplyr' 
#> The following objects are masked from 'package:stats': 
#> 
#>  filter, lag 
#> The following objects are masked from 'package:base': 
#> 
#>  intersect, setdiff, setequal, union 
dat <- dat %>% mutate_all(factor, levels = mylevels) 
dat 
#> # A tibble: 3 × 6 
#> `Increased student engagement` 
#>       <fctr> 
#> 1     Strongly agree 
#> 2  Neither agree nor disagree 
#> 3      Disagree 
#> # ... with 5 more variables: `Instructional time effectiveness 
#> # increased` <fctr>, `Increased student confidence` <fctr>, `Increased 
#> # student performance in class assignments` <fctr>, `Increased learning 
#> # of the students` <fctr>, `Added unique learning activities` <fctr> 
lapply(dat, levels) 
#> $`Increased student engagement` 
#> [1] "Strongly disagree"   "Disagree"     
#> [3] "Neither agree nor disagree" "Agree"      
#> [5] "Strongly agree"    
#> 
#> $`Instructional time effectiveness increased` 
#> [1] "Strongly disagree"   "Disagree"     
#> [3] "Neither agree nor disagree" "Agree"      
#> [5] "Strongly agree"    
#> 
#> $`Increased student confidence` 
#> [1] "Strongly disagree"   "Disagree"     
#> [3] "Neither agree nor disagree" "Agree"      
#> [5] "Strongly agree"    
#> 
#> $`Increased student performance in class assignments` 
#> [1] "Strongly disagree"   "Disagree"     
#> [3] "Neither agree nor disagree" "Agree"      
#> [5] "Strongly agree"    
#> 
#> $`Increased learning of the students` 
#> [1] "Strongly disagree"   "Disagree"     
#> [3] "Neither agree nor disagree" "Agree"      
#> [5] "Strongly agree"    
#> 
#> $`Added unique learning activities` 
#> [1] "Strongly disagree"   "Disagree"     
#> [3] "Neither agree nor disagree" "Agree"      
#> [5] "Strongly agree" 

Hinweis der Wechsel von <chr> zu <fctr> im Ausdruck. Vergleichen Sie dies mit der read.csv Lösung:

facultyData <- read.csv("factor_labels.csv") 
lapply(facultyData, levels) 
#> $Increased.student.engagement 
#> [1] "Disagree"     "Neither agree nor disagree" 
#> [3] "Strongly agree"    
#> 
#> $Instructional.time.effectiveness.increased 
#> [1] "Neither agree nor disagree" "Strongly agree"    
#> [3] "Strongly disagree"   
#> 
#> $Increased.student.confidence 
#> [1] "Neither agree nor disagree" "Strongly agree"    
#> 
#> $Increased.student.performance.in.class.assignments 
#> [1] "Disagree"     "Neither agree nor disagree" 
#> [3] "Strongly agree"    
#> 
#> $Increased.learning.of.the.students 
#> [1] "Disagree"     "Neither agree nor disagree" 
#> [3] "Strongly agree"    
#> 
#> $Added.unique.learning.activities 
#> [1] "Neither agree nor disagree" "Strongly agree" 

Da Variablen in der Untergruppe nicht alle Ebenen enthalten, die Anzahl der Stufen variiert und die Werte sind nicht immer in einer logischen Reihenfolge, die festgelegt werden müssten. Dies ist eine häufige Quelle von Fehlern/Frustration auf der ganzen Linie!

Verwandte Themen