识别数据框中具有多个重复项的行并对其进行计数

时间:2013-03-14 21:35:12

标签: r

我对此数据框有疑问,请在此链接中添加:

https://dl.dropbox.com/u/83787253/Base.RData

我的问题是我想识别具有多个副本的行。我使用此代码来解决我的问题但它计算所有行,包括uniques的行。

z1=data.frame(ddply(Base, .(TIPO_MOVIMIENTO,FECHA.DE.PROCESO.DEL.SISTEMA.DEL.MOVIMIENTO,FECHA.REAL.DEL.MOVIMIENTO,VALOR_TOTAL_MOVIMIENTO,NOMBRE.DEL.MOVIMIENTO.Y.NTAD.NTAC,ID,Categoria),summarise,X=length(ID))) 

它有效,但我不知道如何只获得具有多个重复项的行。感谢

1 个答案:

答案 0 :(得分:1)

data.table回答

DT <- data.table(d, key = 'ID')
DTu <- unique(DT)[,N:=0L][DT[, .N,by = list(ID, Amount)][N >1], N := i.N]
DTu
##     ID Amount N
## 1: 001     10 2
## 2: 002     20 0
## 3: 003     50 2
## 4: 004     30 0

这会创建一个唯一的data.table(基于密钥),该data.table中的集合N=0,然后它与一个data.table连接,该数据已经计算了行数是子集的包含大于1的那些计数,然后在唯一的data.table中分配这个新计数,用正确的数字覆盖N = 0。

第二种,也许更简单的方法(使用问题中的更新数据,包括类列)

 DT[, .N  ,by = list(ID, Class)][,list(dups = sum(N[N>1])) ,by= ID]
    ID dups
1: 001    2
2: 002    0
3: 003    2
4: 004    0