我有一個包含產品原型測試數據的數據集。並非所有測試都在所有批次上運行,並且並非所有測試都以相同的樣本大小執行。爲了說明這一點,考慮這種情況下:使用聚合的na.omit和na.pass的混合?
> test <- data.frame(name = rep(c("A", "B", "C"), each = 4),
var1 = rep(c(1:3, NA), 3),
var2 = 1:12,
var3 = c(rep(NA, 4), 1:8))
> test
name var1 var2 var3
1 A 1 1 NA
2 A 2 2 NA
3 A 3 3 NA
4 A NA 4 NA
5 B 1 5 1
6 B 2 6 2
7 B 3 7 3
8 B NA 8 4
9 C 1 9 5
10 C 2 10 6
11 C 3 11 7
12 C NA 12 8
在過去,我只不得不處理不匹配的重複,這一直是容易aggregate(cbind(var1, var2) ~ name, test, FUN = mean, na.action = na.omit)
(或默認設置)的情況下。對於var1
,我會得到每個批次的平均值超過三個值,以及對於var2
超過四個值。
不幸的是,這將讓我完全缺失的數據集很多A
在這種情況下:
aggregate(cbind(var1, var2, var3) ~ name, test, FUN = mean, na.action = na.omit)
name var1 var2 var3
1 B 2 6 2
2 C 2 10 6
如果我使用na.pass
,不過,我還沒有得到我想要的:
aggregate(cbind(var1, var2, var3) ~ name, test, FUN = mean, na.action = na.pass)
name var1 var2 var3
1 A NA 2.5 NA
2 B NA 6.5 2.5
3 C NA 10.5 6.5
現在我失去了我在var1
中的良好數據,因爲它包含NA
的實例。
我想的是:
NA
作爲的varN
〜name
是NA
小號- 的
mean()
輸出,如果有一個以上的實際值mean()
如果所有獨特組合改變輸出爲varN
〜name
我猜這是預先tty簡單,但我只是不知道如何。我是否需要使用ddply
這樣的東西?如果是這樣的......我傾向於避免它的原因是,我寫出來很長等同aggregate()
像這樣:
ddply(test, .(name), summarise,
var1 = mean(var1, na.rm = T),
var2 = mean(var2, na.rm = T),
var3 = mean(var3, na.rm = T))
呀......所以這個結果顯然我想要做什麼。無論如何我都會留下問題,以防1)aggregate()
或2)ddply
更短的語法。
重新絆倒在一個答案重新。 'ddply' [這裏](http://stackoverflow.com/questions/10787640/r-ddply-summarize-with-large-number-of-columns)。基本上,融化數據框架,根據感興趣的變量和前一個列名稱的組合應用'mean()',然後將其轉換回原始形狀。任何其他? – Hendy