2017-02-07 89 views
0

我找到了一個答案(現在deleted)到this question,我很好奇它爲什麼不起作用。返回列的最大/最小值,按組,使用plyr :: ddply

問題是:按組返回最小值對應的行。

因此,例如,給出的數據集:

df <- data.frame(State = c(rep('AK',4),rep('RI',4)), 
        Company = LETTERS[1:8], 
        Employees = c(82L, 104L, 37L, 24L, 19L, 118L, 88L, 42L)) 

...正確的答案是:

State Company Employees 
1: AK  D  24 
2: RI  E  19 

如能獲得,例如,通過

library(data.table); setDT(df)[ , .SD[which.min(Employees)], by = State] 

我的問題是爲什麼這個plyr::ddply指令不是工作:

library(plyr) 
ddply(df, .(State), summarise, Employees=min(Employees), 
     Company=Company[which.min(Employees)]) 
# returns: 
# State Employees Company 
# 1 AK  24  A 
# 2 RI  19  E 

換句話說,爲什麼which.min(Employees)返回各1組,而不是c(4,1)?需要注意的是ddply外,這個工程:

summarise(df, minEmp = min(Employees), whichMin = which.min(Employees)) 
# minEmp whichMin 
# 1  19  5 

我不使用plyr不多,但我想知道做正確的方式,如果有一個合理的一個。

+0

@hrbrmstr我看見你回覆了我的意見,但隨後消失了 - 只是好奇什麼是正確的方式來使用'plyr'會做... – C8H10N4O2

回答

1

我收到了正確的答案。不知道你的情況..

library(plyr) 
ddply(df, .(State), function(x) x[which.min(x$Employees),]) 
    State Company Employees 
1 AK  D  24 
2 RI  E  19 
+0

清楚,很簡單,我會在允許的情況下接受 – C8H10N4O2

+0

現在它給你的結果? @ C8H10N4O2是什麼問題呢? –

+0

您的解決方案沒有問題。有用。我之前嘗試過的(如問題所述)無效。 – C8H10N4O2