2016-02-11 4 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 < - м%>% group_by (место нахождения)%>% подвести итог (максимум (abun))

Однако, команда в конечном итоге выделения только те места с наибольшим обилием (только места с обилием 15) не самый высокий изобилие в каждом месте. Кто-нибудь знает, как это исправить?

+0

Возможно, вы также загрузили пакет 'plyr', который приводит к конфликтам имен функций. Поэтому вы можете попробовать «m%>% group_by (location)%>% dplyr :: summary (max (abun))» и в будущем сначала загрузить plyr, а затем dplyr или вообще не загружать plyr, если не требуется –

+0

@Elizabeth M. см. Обновленный ответ. Если это решает вашу проблему, пожалуйста, подумайте о ее принятии. – 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