2017-04-27 13 views
0

私はいくつかの調査データを持っており、5ポイントのリーチスケールになっています。ただし、一部の応答列では、いくつかの要素が欠落しています。データは次のとおりです。Rのリッカートで因子レベルが等しくない

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

ご覧のとおり、一部のレスポンス列にはいくつかの要素が欠けています。

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) 

しかし、これは第一列に、IがRで次のコードを使用しています(簡単にするために、私は実際のデータセットのサブセットを貼り付けた)

含まれていない同意、強く同意私は(コードfacultyData[] <- lapply(facultyData[], factor, levels=1:5)のコメント行に1つ)の他の支柱の上に述べた解決策を試してみましたが、それは動作しません

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

いずれか

次のエラーにつながります

はどうやら、このlappyを実行する前に、データが含まれています

# 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値で上書きされて実行した後?なぜこうなった?次のようにコードを変更した後、データが保持される

> 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になる、まだ私は同じエラーを取得しません)

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

答えて

2

データを書き直すのは楽しいことではありませんでしたが、これは理解するのには少し時間がかかりましたが、これが役立つと思います。誰かが短い道を持っているかもしれません。それが役に立ったら教えてください。

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

私は、主な問題は、 'read_excel'機能であることを考え出しました。 read.csv( 'FacultyResponsesForR.csv'、colClassesの= cで( '要因'、 '要因'、 '要因'、 "因子"、 "因子"、 "因子")) '、それがうまく働いた - 私は' facultyDataを<使用しました。 – vipin8169

+0

嬉しいです。 –

+0

ありがとうございました。 – vipin8169

2

サンプルデータを使用してExcelファイルを作成しました。 read_excelでこれをで読むこと

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> 

あなたはread_excelが要因に文字変数を変​​換していないことを正しいと次のように結果を提供します - 多くの場合、カテゴリとして文字変数を処置するために不必要または不適切であるとして、これは、意図的です。 factorに変換したい場合でも、要素を適切な順序で適切なレベルに保つために、これを明示的に行うことをお勧めします(デフォルトでは、変数はアルファベット順にソートされたレベルで作成されます)。名前の変更や再グループ化のような複雑な作業をしたい場合もありますが、ここではレベルを変更するのではなく、完全なレベルを指定するだけです。必要な要素を作成する1つの方法は、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" 

ノートからmutate_allプリントアウトで<fctr><chr>からの変更です。 read.csv液にこれを比較し:

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" 

サブセット内の変数は、すべてのレベルが含まれていないので、レベルの数が変化し、レベルが固定される必要があるであろう論理的な順序、常にではありません。これはエラー/フラストレーションの一般的な原因です。

関連する問題