2013-07-03 48 views
-1

說我有這個數據幀,教訓,有3列(UserCourseScore),它看起來像:返回一個數據幀只用最大值

用戶課程成績

A 1.1  9 
    A 1.1  8   
    B 1.2  7 

只有它有更多的數據。如果我想獲得每個用戶只有最高分數的數據框,我該如何去做呢? 我想:

lesson<-lesson[order(lesson$User,lesson$Course,-lesson$User),] 

然後

lesson[!duplicated(lesson$User && lesson$Course),] 

,但我得到一個錯誤回來。

回答

3
DF <- read.table(text="User Course Score 
A 1.1  9 
A 1.1  8 
B 1.1  1 
B 1.2  7",header=TRUE) 

aggregate(Score~Course*User,data=DF,FUN=max) 

# Course User Score 
#1 1.1 A  9 
#2 1.1 B  1 
#3 1.2 B  7 
+0

該文件是一個CSV,我已經導入,所以我假設公式發生了變化?因爲我得到了一個錯誤 – user2543427

+2

「我得到了一個錯誤」並不是很有幫助。有錯誤消息的原因,你知道嗎? – Roland

+0

它說:「as.data.frame.default(x)中的錯誤:不能將類」公式「轉換爲data.frame」 – user2543427

0

,或者你可能想嘗試plyr包

library(plyr) 
ddply(DF,.(User,Course),transform,maxScore=max(Score,na.rm=TRUE)) 

User Course Score maxScore 
A 1.1  9  9 
A 1.1  8  9 
B 1.1  1  1 
B 1.2  7  7 

,或者如果你想看到的最高得分只有

ddply(DF,.(User,Course),summarise,maxScore=max(Score,na.rm=TRUE)) 

User Course maxScore 
A 1.1  9 
B 1.1  1 
B 1.2  7