#資料讀取
dta <- read.csv("data.csv", h = T)
#前六筆資料
head(dta)
##   ID Gender T1 T2 T3
## 1  1      2 13  9 13
## 2  2      2 13  8 12
## 3  3      2 11  7  7
## 4  4      2 14  9 10
## 5  5      2  7  6  5
## 6  6      2 13 10 11
#資料的結構
str(dta)
## 'data.frame':    21 obs. of  5 variables:
##  $ ID    : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Gender: int  2 2 2 2 2 2 2 2 2 2 ...
##  $ T1    : int  13 13 11 14 7 13 8 15 13 15 ...
##  $ T2    : int  9 8 7 9 6 10 7 11 9 9 ...
##  $ T3    : int  13 12 7 10 5 11 8 15 8 13 ...
#將原始資料轉換成long data
dtaLong <- pivot_longer(dta, cols = c(, 3:5), names_to = "time", values_to = "num")
#前六筆long data
head(dtaLong)
## # A tibble: 6 x 4
##      ID Gender time    num
##   <int>  <int> <chr> <int>
## 1     1      2 T1       13
## 2     1      2 T2        9
## 3     1      2 T3       13
## 4     2      2 T1       13
## 5     2      2 T2        8
## 6     2      2 T3       12
#long data的結構
str(dtaLong)
## tibble [63 x 4] (S3: tbl_df/tbl/data.frame)
##  $ ID    : int [1:63] 1 1 1 2 2 2 3 3 3 4 ...
##  $ Gender: int [1:63] 2 2 2 2 2 2 2 2 2 2 ...
##  $ time  : chr [1:63] "T1" "T2" "T3" "T1" ...
##  $ num   : int [1:63] 13 9 13 13 8 12 11 7 7 14 ...
#把long data中time和ID的charter變項轉換成factor變項
dtaLong$time <- as.factor(dtaLong$time)
dtaLong$ID <- as.factor(dtaLong$ID)
#將long data轉換成wide data
dtaWide <- pivot_wider(dtaLong, names_from = "time", values_from = "num")
#wide data的前六筆資料
head(dtaWide)
## # A tibble: 6 x 5
##   ID    Gender    T1    T2    T3
##   <fct>  <int> <int> <int> <int>
## 1 1          2    13     9    13
## 2 2          2    13     8    12
## 3 3          2    11     7     7
## 4 4          2    14     9    10
## 5 5          2     7     6     5
## 6 6          2    13    10    11
#wide data的結構
str(dtaWide)
## tibble [21 x 5] (S3: tbl_df/tbl/data.frame)
##  $ ID    : Factor w/ 21 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
##  $ Gender: int [1:21] 2 2 2 2 2 2 2 2 2 2 ...
##  $ T1    : int [1:21] 13 13 11 14 7 13 8 15 13 15 ...
##  $ T2    : int [1:21] 9 8 7 9 6 10 7 11 9 9 ...
##  $ T3    : int [1:21] 13 12 7 10 5 11 8 15 8 13 ...
#畫圖囉
plot(num ~ time, data = dtaLong, 
      frame.plot = FALSE)

#再畫一次,這次特別看平均數的走向
plotmeans(num ~ time, data = dtaLong, frame = F)
## Warning in plot.xy(xy.coords(x, y), type = type, ...): "frame" 不是一個繪圖參數
## Warning in axis(1, at = 1:length(means), labels = legends, ...): "frame" 不是一
## 個繪圖參數
## Warning in plot.xy(xy.coords(x, y), type = type, ...): "frame" 不是一個繪圖參數

#平均的總和
aggregate(num ~ time, data = dtaLong, mean)
##   time       num
## 1   T1 11.857143
## 2   T2  8.285714
## 3   T3  9.333333
#標準差的總和
aggregate(num ~ time, data = dtaLong, sd)
##   time      num
## 1   T1 3.054271
## 2   T2 2.552310
## 3   T3 3.022141
#ANOVA test
summary(aov(num ~ time, data = dtaLong))
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## time         2  141.6   70.78   8.501 0.000561 ***
## Residuals   60  499.5    8.33                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#ANOVA for repeated measures
summary(aov(num ~ time + Error(ID), data = dtaLong))
## 
## Error: ID
##           Df Sum Sq Mean Sq F value Pr(>F)
## Residuals 20  431.1   21.55               
## 
## Error: Within
##           Df Sum Sq Mean Sq F value   Pr(>F)    
## time       2 141.56   70.78   41.36 1.83e-10 ***
## Residuals 40  68.44    1.71                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1