2015-04-30 40 views
1

我有姓名,年級和值「EMP」數據集(根據經理的反饋)骨料() - R的 - 是有可能掩蓋聚集一列從顯示並添加另一列

name grade value 
1 Ram  R 2.1 
2 Sam  R 2.4 
3 Jam  R 5.3 
4 Bill  S 4.2 
5 Claw  S 3.6 
6 Men  S 1.2 
7 Jay  P 5.3 
8 Kay  P 3.8 
9 Ray  P 3.2 

隨着aggregate(value ~ grade, data = emp, FUN=min)我得到了最小值每個年級

grade value 
1  P 3.2 
2  R 2.1 
3  S 1.2 

基礎上,我想只顯示等級和名字,但不是值列中的最小值。這可能與R.

aggregate()
+0

http://stackoverflow.com/ question/6289538/aggregate-a-dataframe-on-a-given-column-and-display-another-column – germcd

回答

2

這裏有一個可能的方法

library(data.table) 
setDT(emp)[, .(name = name[which.min(value)]), by = grade] 
# grade name 
# 1:  R Ram 
# 2:  S Men 
# 3:  P Ray 

這裏的另一個

library(dplyr) 
emp %>% 
    group_by(grade) %>% 
    summarise(name = name[which.min(value)]) 

# Source: local data table [3 x 2] 
# 
# grade name 
# 1  R Ram 
# 2  S Men 
# 3  P Ray 

或者與基礎R

do.call(rbind, by(emp, emp$grade, 
        function(x) data.frame(grade = as.character(x$grade[1L]), 
             name = x$name[which.min(x$value)]))) 
# grade name 
# P  P Ray 
# R  R Ram 
# S  S Men 
+0

您的工作是讚賞,但我的問題是不可能使用aggregate()函數來做同樣的事情嗎? – srivatsa

+0

我不這麼認爲。你爲什麼要堅持'聚合'? –

+0

這是錯誤的工具。 '聚合'函數一次只能「看到」一個矢量,所以他們沒有必要的數據來處理兩列。基本範式將是'lapply(split(,),FUN)'。 –