2016-02-11 31 views
0

我試圖組織一個數據集與同一位置的多個副本的唯一位置。另外,我只想保留每個位置條目的最大豐度報告。這是數據集的前6行。注意3和4的位置是相同的,所以我想放棄第3行並保留第4行,因爲它具有更高的丰度。第5行和第6行的丰度最高,但我只需要保留其中一個。使用dplyr總結與最大數量重複的組

X abun location  
1 1  L2507550 
2 1  L668283 
3 1  L831877 
4 5  L831877 
5 3  L668283 
6 3  L668283 

這裏是我使用的代碼:

require(dplyr) 
require(reshape2) 
require(lubridate) 

########Load data and clean######## 
#set working directory to load data from Data folder 
setwd("V:/snailData") 
getwd() 

#Load csv 
m <- read.csv("may.csv") 

#group data by location and identify the maximum abundance for each location 
m_max <- m %>% group_by(location) %>% summarise(m, max(abun)) 

這裏的錯誤消息我得到:

> m_max <- m %>% group_by(location) %>% summarise(m, max(abun)) 
Error: expecting a single value 

難道因爲有丰度最高的多條記錄我得到這個錯誤?如何解決這個問題可以得到解決的任何見解都會有所幫助。 謝謝。

UPDATE

這從@paljenczy答案擺脫了錯誤消息(謝謝!): 管道操作符%>%通過左邊的第一個參數在其表達式的結果功能在右側。因此你不需要m作爲第一個參數來總結。儘量

'm_max的< - M%>%GROUP_BY(位置)%>%綜述(MAX(abun))'

但是,命令最終挑選出只與丰度最高的位置(只適用地點丰度爲15)不是每個地點的最高丰度。有誰知道如何解決這一問題?

+0

也許你還加載了'plyr'包,導致函數名衝突。因此,你可以嘗試'm%>%group_by(location)%>%dplyr :: summarize(max(abun))',將來先裝載plyr,然後再裝載dplyr或者根本不需要裝載plyr –

+0

@伊麗莎白米看到更新的答案。如果它解決了你的問題,請考慮接受它。 – paljenczy

回答

1

管道運算符%>%將其左側的表達式的結果作爲第一個參數傳遞給右側的函數。因此,您不需要m作爲summarise的第一個參數。使用dplyr 0.4.3,試試

library(dplyr) 

m <- data.frame(X = 1:6, 
       abun = c(1, 1, 1, 5, 3, 3), 
       location = c("L2507550", 
          "L668283", 
          "L831877", 
          "L831877", 
          "L668283", 
          "L668283"), 
       stringsAsFactors = F) 

m_max <- m %>% group_by(location) %>% summarise(max(abun)) 

> m_max 
Source: local data frame [3 x 2] 

    location abun 
    (chr) (dbl) 
1 L2507550  1 
2 L668283  3 
3 L831877  5