识别重复项(两列),根据另一列对其求和,并将其他变量保留在R

时间:2019-10-15 19:42:32

标签: r duplicates plyr

我有一个数据库,该数据库具有重复的坐标(纬度和经度)以及相应的大量证据以及其他变量(请参见下表)。我想删除这些重复项,但同时将相应的数量相加。此外,我想在最终数据框中保留有关其他变量的信息。

我可以消除重复项并求和相应的丰度

data.2<-ddply(data,~lat + long,summarise, abund=sum(abund))
data.2<-data.2[-1,]

但不知道如何将其他变量(例如year,method ...)与数据框同时保留。

enter image description here

以下是可重复的示例

id<-c('6916','7727','7728','7230')
method<-c('R','R','R','T')
year<-c(2012,2012,2012,2012)
lat<-c(-6.612,-6.611,-6.611,-6.610)
long<-c(30.638,30.607,30.607,30.609)
abund<-c(1,1,1,1)

df<-data.frame(id,method,year,lat,long,abund)

1 个答案:

答案 0 :(得分:0)

以下是data.table解决方案。假设您希望将重复的abund项的lat/long个计数计入abund的相应总和中。

require(data.table); setDT(df)

df[, abund := sum(abund), .(lat, long)]         # Sum abund across lat/long 
df = df[!duplicated(lat) & !duplicated(long)]   # Remove duplicate lat/long entries

> df
     id method year    lat   long abund
1: 6916      R 2012 -6.612 30.638     1
2: 7727      R 2012 -6.611 30.607     2
3: 7230      T 2012 -6.610 30.609     1