2012-04-19 33 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"