使用dplyr汇总具有最大数量

时间:2016-02-11 20:29:33

标签: r group-by unique dplyr summarization

我正在尝试按照唯一的位置组织一个具有相同位置的多个重复项的数据集。另外,我只想保持每个位置条目报告的最大丰度。这是数据集的前6行。注意3和4是如何相同的位置,所以我想要丢弃第3行并保留第4行,因为它具有更高的丰度。第5行和第6行都具有最高的丰度,但我只需要保留其中一个。

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

我是否收到此错误,因为有多个最丰富的记录?任何有关如何解决此问题的见解都会有所帮助。 谢谢。

更新

@paljenczy的回答摆脱了错误信息(谢谢!): 管道运算符%&gt;%将左侧表达式的结果作为第一个参数传递给右侧的函数。因此,您不需要m作为总结的第一个参数。尝试

'm_max&lt; - m%&gt;%group_by(location)%&gt;%summary(max(abun))'

然而,该命令最终仅挑选出丰度最高的地点(只有丰度为15的地点),而不是每个地点的最高丰度。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分: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