#資料讀取
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