2016-10-25 165 views
-1

比方說,我有一個數據幀根據R中的條件提取數據幀中的某些行數?

Group Pos Score 
A  V 82 
A  V 72 
A  W 95 
A  W 92 
A  W 65 
A  W 61 
A  X 82 
A  X 80 
A  X 70 
B  V 88 
B  V 77 
B  W 95 
B  W 91 
B  W 85 
B  W 71 
B  X 88 
B  X 83 
B  X 78 
... 
#this data frame has groups with values C, D, E, etc also 

比方說,我想保持分數上面的數字爲每Group,每個Pos。例如,假設我想保持前1 ScorePos=V,前3 Score S代表Pos=W,和前2 Score S的Pos=X

所以我想數據框看起來像

Group Pos Score 
A  V 82 
A  W 95 
A  W 92 
A  W 65 
A  X 82 
A  X 80 
B  V 88 
B  W 95 
B  W 91 
B  W 85 
B  X 88 
B  X 83 

如何我可以在R中做這個嗎?

回答

1

我們可以嘗試

v1 <- unique(df1$Pos) 
Map(function(x,y) 
    filter(df1, Pos==x) %>% 
     group_by(Group) %>% 
     top_n(y, wt = Score), v1, c(1, 3, 2)) %>% 
    bind_rows() 
+0

這個工作大部分。一個問題是在2個分數並列的情況下。例如,如果我在我的問題中修改數據框,以便有2個「A V 82」條目,那麼您的代碼將返回2行「A V 82」,而不是1條。我該如何解決這個問題? – user5739619

+0

另外,在我運行你的代碼之後,我如何得到每個「Group」和「Pos」的平均分數。例如,對於「A X 82」和「A X 80」,如何返回「A X 81」,因爲81是82和80的平均值? – user5739619

+0

@ user5739619獲取平均分數'%>%group_by(Group,Pos)%>%summarize(Mean = mean(Score))'第一部分對我來說還不夠清楚。 – akrun