[R-br] Encontrar valores duplicados por linha em um data.frame

Guilherme Gerhardt Mazzochini gmazzochini em gmail.com
Terça Agosto 14 10:50:31 BRT 2012


Olá pessoal,

Eu possuo um banco de dados com com quase 900 mil linhas e 23 colunas.
Segue um exemplo simplificado abaixo:


set.seed(321)
v<-data.frame(rbind(sample(1:3,10,replace = T),
                    sample(1:3,10,replace = T),
                    sample(1:3,10,replace = T),
                    sample(1:3,10,replace = T),
                    rep(1,10)))

> v
  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1  3  1  2  2  3  2  1  2  3   2
2  1  1  2  3  2  3  3  1  1   1
3  1  1  2  2  2  3  2  1  3   1
4  2  3  3  2  3  1  3  3  2   1
5  1  1  1  1  1  1  1  1  1   1


Para cada linha eu quero determinar qual a coluna do primeiro valor que não
é duplicado do primeiro elemento da linha (coluna 1) e salvar em um vetor o
numero da coluna do primeiro elemento não duplicado.
Assim,

> which(v[1,]!=v[1,1])[1]
[1] 2

Ou seja, a segunda coluna possui o primeiro elemento diferente do elemento
na primeira coluna.

Eu tentei fazer um loop para fazer isso para todas as linhas, mas devido ao
grande número de linhas está demorando muito tempo.

x<-numeric(nrow(v))
for(i in 1:nrow(v)){
    x[i]<-which(v[i,]!=v[i,1])[1]
}

> x
[1]  2  3  3  2 NA    # o valor NA é porque na quinta linha todos os
valores são iguais.

Alguém tem idéia de como eu posso fazer isso de forma mais rápida??

Obrigado antecipadamente,

Guilherme
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120814/a63728e8/attachment.html>


Mais detalhes sobre a lista de discussão R-br