2016-04-22 25 views
0

我想基于组合条件在列ID中找到对应元素,如果列GROUP等于2并且最大值发生在列OBS。R:如何根据其他列中的组合条件找到一列中的元素

如何在R中完成这项任务?

这里是我的数据集:

ID <- as.factor(c("A","B","C","D","E","F")) 
OBS <- c(1,3,2,8,3,10) 
GROUP <- as.factor(c(1,1,1,2,2,2))  
df <- data.frame(ID,OBS,GROUP) 

非常感谢。

+1

你试过了什么?要清楚,您希望最大的OBS超出整个数据集,或只需要GROUP == 2的最大值? – rawr

+1

对于后者......'(df,df $ GROUP,function(x)x [which.max(x $ OBS),])$''2''但不这样做。 – Frank

+0

从这个例子中,OBS中的最大值是GROUP 2的10。并且ID中的相应元素是F.我想根据GROUP和最大OBS找到相应的元素。 –

回答

2

假设你意味着要第一子集由所述条件GROUP应等于2,然后识别ID为其中OBS值是最高的数据帧,这应该做的伎俩:

df2 <- df[df$GROUP==2,] 
df2$ID[df2$OBS==max(df2$OBS)] 
+2

也许值得一提的是package更简单的语法:'library(data.table); setDT(df)[GROUP == 2] [OBS == max(OBS)]'或'library(dplyr); df%>%filter(GROUP == 2)%>%filter(OBS == max(OBS))' – Frank

+0

如果可以通过一行代码完成,是否可能? –

+1

'(df,ID [which.max(OBS * GROUP%in%2)]'我也在0行,但我不告诉你如何 – rawr