2016-12-06 49 views
0

可以在ddply()的某些變量的數據框分組中應用某些函數,但是如何引用分組數據框作爲函數的參數?如何在ddply函數中引用它自己的分組數據框()

採取分鐘()爲例:

我有什麼:

> BodyWeight 
    Treatment day1 day2 day3 
1   a 32 33 36 
2   a 35 35 26 
3   a 33 38 46 
4   b 23 24 25 
5   b 22 16 34 
6   b 36 35 37 
7   c 45 45 39 
8   c 29 26 12 
9   c 43 27 36 

我想要什麼:

Treatment min 
1   a 26 
2   b 16 
3   c 12 

我做了什麼,我得到了什麼:

> ddply(BodyWeight, .(Treatment), summarize, min= min(BodyWeight[,-1])) 
    Treatment min 
1   a 12 
2   b 12 
3   c 12 

min()只是一個例子,unspecif ic解決方案是需要的。

回答

1

你想要的是按治療和日期總結。問題是你有多個專欄的日子。您需要將數據從寬格式(多列)轉換爲長格式(鍵值對)。

library(tidyr) 
library(plyr) 

bw_long <- gather(Bodyweight, day, value, day1:day3) 

ddply(bw_long, .(Treatment, day), summarize, min = min(value)) 

p.s.查看plyrdplyr

+0

非常感謝。但是min()僅僅是一個例子,事實上,在實際工作中,將採用以分割數據框爲參數的更復雜的自定義函數。 –

+0

我相信'plyr'分別評估分割數據框的所有部分,因此您可以使用'$'操作符來訪問您想要的變量(例如'min(Bodyweight $ day1)'。我仍然建議您檢查out'dplyr'和標準評估。 –

1

的後繼我們可以使用data.table。將'data.frame'轉換爲'data.table'(setDT(BodyWeight)),按'治療'分組,unlist Data.table的子集(.SD),並獲得min的值。

library(data.table) 
setDT(BodyWeight)[, .(min = min(unlist(.SD))) , by = Treatment] 
# Treatment min 
#1:   a 26 
#2:   b 16 
#3:   c 12 
相關問題