2013-03-14 48 views
-1

我有这个数据帧的一个问题,那就是在这个环节alocated:确定行有一个以上的副本,并指望他们

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

我的问题是,我想标识具有多个副本的行。我使用这个代码来解决我的问题,但它统计所有行,包括独特的行。

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))) 

它的工作原理,但我不知道如何获得只有一个以上重复的行。由于

+0

ID是否应只是003有1个重复? – alexwhan 2013-03-14 21:44:11

+0

如果还有两行像这样,你会怎么做:'001 30,001 30'? – Arun 2013-03-14 21:45:18

回答

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 
+0

谢谢,当有唯一的注册时,会发生什么情况。我看到它不算它呢? – Duck 2013-03-14 22:48:05

+0

@ user2080848 - 我不知道这个评论意味着什么。如果您有一个更复杂的案例需要解决,请编辑您的问题并包含这些数据和您的预期结果。 – mnel 2013-03-14 22:51:59

+0

我用真实数据编辑我的帖子,我遇到了麻烦 – Duck 2013-03-14 23:29:13