2016-02-11 99 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