2012-04-19 35 views
4

給定一個數據幀df,列爲d,c,v。如何查找d的最大值v之間的值子集的記錄其中c == "foo"在數據幀子集中找出列的最大值

我嘗試這樣做:

df[df$v==max(df$v) & df$c == "foo","d"] 

但我得到:

character(0) 

回答

9

呦操作如下:

with(df, d[v== max(v[c=="foo"])]) 

編輯: 如果你想獲得的價值d適用於所有級別的c

library(plyr) 
ddply(df, "c", subset, v==max(v)) 
+0

謝謝。與(df,d [v == max(v [c ==「foo」])])是我正在尋找。 – amh 2012-04-19 17:02:59

+0

對於我而言,我確實希望獲得c的所有級別的d的值,但它告訴我R-3.1.2中「尚未支持的長向量」。該文件有點大,壽,所以我解決了另一種方式,但肯定是upvote! – 2015-03-06 00:23:00

1

雖然Manuel的答案將工作的大部分時間,我相信一個更正確的版本是:

with(df, d[v== max(v[c=="foo"]) & c=="foo"]) 

否則,它可能是匹配的具有v==max但事實上並非子集的行c=="foo"