2012-12-20 206 views
1

我發現了幾個關於此主題的問題/答案,但我無法解決我的問題......所以我會按照自己的方式提出問題。很抱歉,如果它是明顯的。與plyr分割數據幀

我準備了一個數據幀(z2)與ggplot2一起使用。該數據框包含一個帶有實數的列「值」,標識測試參數的列「名稱」,作爲每個個體唯一ID的列「loghos」和作爲結果變量的列「statut」。

我能夠容易地繪製「值」,根據用於「statut」針對每個「名稱」用下面的代碼:

pt <- ggplot(z2, aes(y = value, x = statut)) 
pt + geom_boxplot(aes(colour=statut)) + facet_wrap(~name, scales="free_y") 

在數據幀中,我重複對每個「名稱」的值對於每個「loghos」(幾個樣本在不同的時間點)

我想繪製每個'名稱'和每個'病人'的最小值。所以我試着用這個plyr, :

x = ddply(z2, .(loghos,name), function(x) return(min(x,na.rm=T))) 

但是,我收到了這個錯誤信息,現在我不知道該怎麼辦?

Erreur dans FUN(X[[1L]], ...) : 
    only defined on a data frame with all numeric variables 

我敢肯定這沒什麼大不了的,但我找不到正確的寫法!

由於提前,

於連

編輯:設置在data.frame的樣品下面

y = z2[sample(nrow(z2),20),c(1,2,3,9,11,12,13)] 
y 
     cleBilan name value loghos sexe age statut 
80612 328347 plaq 384.00 31218139 M 21 transfert 
36304 363835  gb 5.62 41416171 M 72 service 
59346 267744 lympho 9.90 30628552 F 22 service 
62746 388270 lympho 8.70 41620223 M 78 service 
81046 342228 plaq 185.00 41120284 M 19 service 
67400 323055 mono 3.10 31273421 F 45 service 
35572 335928  gb 16.16 41178061 F 22 transfert 
71136 256960 neutro 10.65 30401746 M 71 transfert 
34324 293368  gb 16.20 30894579 F 30 service 
69010 383939 mono 6.90 41574890 M 22 service 
63665 236360 mono 4.40 29970714 M 71 service 
31366 233999  gb 7.20 29959612 F 18 service 
60867 317932 lympho 12.00 31229099 M 50 service 
74487 355581 neutro 10.68 41154330 F 23 service 
65520 265864 mono 7.00 30583193 M 78 service 
36553 375590  gb 7.10 41489078 M 61 service 
65849 268730 mono 3.90 30652360 M 89  deces 
80813 354964 plaq 404.00 41120284 M 19 service 
31271 232524  gb 6.30 29934806 M 36 service 
72789 291335 neutro 11.00 30923095 F 35 service 
+3

hi julien,你能提供[一些示例數據](http://stackoverflow.com/questions/5963269/how-to -ma-r-reproducible-example)?:) –

+3

可能是'ddply(z2,。(loghos,name),summary,value = min(value,na.rm = T))',很難說沒有數據 – baptiste

+1

或ddply(z2,。(loghos,name ),函數(x)min(x $ value,na.rm = T))'。 'ddply'傳遞給匿名函數的參數是data.frame。 – Roland

回答

1
回答

總結從註釋:

作爲評論由巴普蒂斯特: 「ddply將數據拆分成小塊;您需要提供一個將塊(data.frame)作爲輸入並返回數據的函數。幀。 。summarise就是這樣的一個功能,但min本身不是」

因此減少初始data.frame,正確的代碼是:

x = ddply(z2, .(loghos, name, statut), summarise, value = min(value,na.rm=T)) 

在此功能中,只有loghosnamevalue是因爲statut is unique for each loghos . I added it to the list to keep its value in the x` data.frame,因爲它是輸出變量。