2016-10-15 9 views
0

私は5つの質問で構成される縦断的アンケートを分析しようとしています。参加者がこのアンケートに4回答えようとしていたとしましょう。建物の平均縮尺はR

ここでは、タスクパフォ​​ーマンスと呼ばれるスケールを作成したいと考えています。この尺度は、質問1、2、5の平均値で作成されます。

5つの測定点ごとにこの平均値が必要です。下の例よりも簡単にこれらの手段を計算する方法はありますか?

私のデータフレームは、この例では、次のようになり
df$performance_T1 <- with(df, rowMeans(cbind(Task1T1,Task2T1,Task5T1), na.rm = TRUE)) 
df$performance_T2 <- with(df, rowMeans(cbind(Task1T2,Task2T2,Task5T2), na.rm = TRUE)) 
df$performance_T3 <- with(df, rowMeans(cbind(Task1T3,Task2T3,Task5T3), na.rm = TRUE)) 
df$performance_T4 <- with(df, rowMeans(cbind(Task1T4,Task2T4,Task5T4), na.rm = TRUE)) 

df = data.frame(Task1T1 <- c(1:5), 
      Task2T1 <- c(1:5), 
      Task3T1 <- c(1:5), 
      Task4T1 <- c(1:5), 
      Task5T1 <- c(1:5), 
      Task1T2 <- c(1:5), 
      Task2T2 <- c(1:5), 
      Task3T2 <- c(1:5), 
      Task4T2 <- c(1:5), 
      Task5T2 <- c(1:5), 
      Task1T3 <- c(1:5), 
      Task2T3 <- c(1:5), 
      Task3T3 <- c(1:5), 
      Task4T3 <- c(1:5), 
      Task5T3 <- c(1:5), 
      Task1T4 <- c(1:5), 
      Task2T4 <- c(1:5), 
      Task3T4 <- c(1:5), 
      Task4T4 <- c(1:5), 
      Task5T4 <- c(1:5)) 

答えて

0

それはあなたのデータセット内のように私には見えます:

  1. 各行は
  2. 人それぞれです「仕事」と「測定」は列にあります。

tidy dataの原則とともに、tidyverseを使用してデータを再構成することができます。

以下の例では、明確にするために明示的にperson_idを追加しました。

library(tidyverse) 

df = structure(list(Task1T1 = 1:5, Task2T1 = 1:5, Task3T1 = 1:5, Task4T1 = 1:5, 
        Task5T1 = 1:5, Task1T2 = 1:5, Task2T2 = 1:5, Task3T2 = 1:5, 
        Task4T2 = 1:5, Task5T2 = 1:5, Task1T3 = 1:5, Task2T3 = 1:5, 
        Task3T3 = 1:5, Task4T3 = 1:5, Task5T3 = 1:5, Task1T4 = 1:5, 
        Task2T4 = 1:5, Task3T4 = 1:5, Task4T4 = 1:5, Task5T4 = 1:5), 
       .Names = c("Task1T1", "Task2T1", "Task3T1", "Task4T1", "Task5T1", 
          "Task1T2", "Task2T2", "Task3T2", "Task4T2", "Task5T2", 
          "Task1T3", "Task2T3", "Task3T3", "Task4T3", "Task5T3", 
          "Task1T4", "Task2T4", "Task3T4", "Task4T4", "Task5T4"), 
       row.names = c(NA, -5L), class = "data.frame") 

df %>% 
    mutate(person_id = row_number()) %>% 
    gather(task, score, -person_id) %>% 
    separate(task, into = c("Task", "Measurement"), sep = "T(?=\\d)") %>% 
    group_by(Task, person_id) %>% 
    summarise(Performance = mean(score, na.rm = T)) -> 
    perf 

head(perf) 
#> Source: local data frame [6 x 3] 
#> Groups: Task [2] 
#> 
#> Task person_id Performance 
#> <chr>  <int>  <dbl> 
#> 1 Task1   1   1 
#> 2 Task1   2   2 
#> 3 Task1   3   3 
#> 4 Task1   4   4 
#> 5 Task1   5   5 
#> 6 Task2   1   1 

データを一人の人の形式で戻し、タスクの平均を列に戻したい場合は、それを元に戻すことができます。

perf %>% 
    spread(Task, Performance, fill = 0) 
#> # A tibble: 5 x 6 
#> person_id Task1 Task2 Task3 Task4 Task5 
#> *  <int> <dbl> <dbl> <dbl> <dbl> <dbl> 
#> 1   1  1  1  1  1  1 
#> 2   2  2  2  2  2  2 
#> 3   3  3  3  3  3  3 
#> 4   4  4  4  4  4  4 
#> 5   5  5  5  5  5  5