## 1. 將InsectSpray資料表根據spray欄位使用split做分割
> d <- InsectSprays
> s <- split(d, d$spray)
## 2. 對於每個不同的spray裡面會一串count值,看這些數值的最大值與最小值等特性:
> tapply(df$count, df$spray, summary)
> lapply(s, function(x) summary(x$count))
> sapply(s, function(x) summary(x$count))
A B C D E F
Min. 7.00 7.00000 0.000000 2.000000 1.00 9.00000
1st Qu. 11.50 12.50000 1.000000 3.750000 2.75 12.50000
Median 14.00 16.50000 1.500000 5.000000 3.00 15.00000
Mean 14.50 15.33333 2.083333 4.916667 3.50 16.66667
3rd Qu. 17.75 17.50000 3.000000 5.000000 5.00 22.50000
Max. 23.00 21.00000 7.000000 12.000000 6.00 26.00000
這邊可以注意tapply與lapply出來的結果會是相同的,但用sapply比較易讀~lapply與sapply的運作方式:先從s讀取出每個元素,將此元素存到後面的變數x裡面,後面的function在對於變數x做各種操作
## 3. 兩兩欄位做count的T檢定,印出p.value值。例如說使用spray A的counts和spray B的counts做T檢定,使用p-value來看平均值有沒有不同:
> lapply(s, function(x) { lapply(s, function(y) t.test(x$count, y$count)$p.value) })
> sapply(s, function(x) { lapply(s, function(y) t.test(x$count, y$count)$p.value) })
A B C D E F
A 1 0.6546567 5.278477e-07 1.012091e-05 2.654548e-06 0.3472757
B 0.6546567 1 5.170528e-08 9.743926e-07 2.940309e-07 0.5472263
C 5.278477e-07 5.170528e-08 1 0.005729735 0.07536352 2.876313e-06
D 1.012091e-05 9.743926e-07 0.005729735 1 0.1229187 2.469968e-05
E 2.654548e-06 2.940309e-07 0.07536352 0.1229187 1 9.550002e-06
F 0.3472757 0.5472263 2.876313e-06 2.469968e-05 9.550002e-06 1
可以看到p-value最小的會是B與C ≈ 5e-8,去看R預設的資料集InsectSprays這裡面的圖示可以發現他們的平均數的確是相差很多。要做兩兩比較的話,必須要用到兩層lapply或sapply。可以理解成把lapply與sapply當成迴圈來使用~
參考資料與相關資料
- R預設的資料集InsectSprays:上述範例使用的資料表
- R語言使用split分割資料表:自動根據某欄位分割資料表的方法
- 掌握R语言中的apply函数族:詳細說明R語言中各種apply要怎麼使用
- R語言使用tapply做分組統計:使用tapply
沒有留言:
張貼留言