2015-11-02 49 views
0

我有這樣一個數據幀過濾數據幀:你如何基於R中的多個列

Server Avg_Cpu 95th 
Server01 40 90 
Server01 45 90 
Server02 56 80 
Server02 50 80 

我需要子集這個數據幀,並選擇具有最高95和Avg_Cpu

獨特的服務器

我最後的DF將是這樣的:

Server Avg_Cpu 95th 
Server01 45 90 
Server02 56 80 

我試過dplyr包如下:

df %>% group_by(Server) %>% filter(Avg_Cpu==max(Avg_Cpu)) 

不太工作,得到:

Error: filter condition does not evaluate to a logical vector. 
+0

@bjosesph,我得到這個錯誤: 「錯誤:期待一個單一的值」 – user1471980

+0

請提供數據的「dput」,否則我們無法幫到你,這個問題很快就會關閉。 –

回答

1

嘗試使用dput(df)str(df)檢查您data.frame的結構,df,因爲這個工作對我來說:

df <- read.table(textConnection("Server Avg_Cpu 95th 
           Server01 40 90 
           Server01 45 90 
           Server02 56 80 
           Server02 50 80"), header = T) 

library(dplyr) 

df %>% 
    group_by(Server) %>% 
    filter(Avg_Cpu == max(Avg_Cpu), 
      X95th == max(X95th)) 

# Source: local data frame [2 x 3] 
# Groups: Server [2] 
# 
#  Server Avg_Cpu X95th 
#  (fctr) (int) (int) 
# 1 Server01  45 90 
# 2 Server02  56 80 

注意,在我的情況` str(df)返回:

# > str(df) 
# 'data.frame': 4 obs. of 3 variables: 
# $ Server : Factor w/ 2 levels "Server01","Server02": 1 1 2 2 
# $ Avg_Cpu: int 40 45 56 50 
# $ X95th : int 90 90 80 80 
+4

所以你認爲「*你的代碼的作品 - 這是一個證明*」作爲答案?我認爲一個適當的評論應該是「*請首先提供你的數據的輸入」。 –