[R-br] Converter informações de linhas duplicadas em colunas
Roney Fraga Souza
roneyfraga em gmail.com
Quarta Agosto 3 20:20:02 BRT 2011
Caros,
Estou com um problema que não consegui resolver, caso alguém saiba um caminho
para solucioná-lo será uma grande ajuda.
Vamos lá, no data.frame (inv):
inv <- data.frame(
seq=c(1,1,1,1,1,1,1,2,2,2,2,2,2),
dv=c(9,9,9,9,9,9,9,7,7,7,7,7,7),
dom=c(1,1,2,2,2,4,4,2,2,3,3,4,4),
veiculo=c(301,101,201,101,301,401,101,101,301,301,101,401,201),
qtde=c(1,2,2,2,1,1,4,1,1,3,1,2,3),
ano=c(2002,2008,1993,2007,1993,2003,2000,2008,2007,2000,2003,2005,1994),
moto_bic=rep(0,13),
carro=rep(0,13),
tt_vei=rep(0,13),
ano_m=rep(0,13))
para facilitar a visualização,
seq dv dom veiculo qtde ano moto_bic carro tt_vei ano_m
1 9 1 301 1 2002 0 0 0 0
1 9 1 101 2 2008 0 0 0 0
1 9 2 201 2 1993 0 0 0 0
1 9 2 101 2 2007 0 0 0 0
1 9 2 301 1 1993 0 0 0 0
1 9 4 401 1 2003 0 0 0 0
1 9 4 101 4 2000 0 0 0 0
2 7 2 101 1 2008 0 0 0 0
2 7 2 301 1 2007 0 0 0 0
2 7 3 301 3 2000 0 0 0 0
2 7 3 101 1 2003 0 0 0 0
2 7 4 401 2 2005 0 0 0 0
2 7 4 201 3 1994 0 0 0 0
temos informações de residências e veículos, as residencias são determinadas
por combinações das variáveis (seq dv e dom), assim, a sequencia 1 9 1 indica
uma residencia, e a combinação 1 9 2 outra residencia, por fim, temos a
residencia de número 2 7 4. A variável veiculo representa os veículos de cada
residência, sendo:
101 bicicleta
201 moto
301 carro
401 outros veículos
Como em uma casa podem existir vários veículos, as informações que definem uma
residencia (seq dv e dom) foram repetidas ao longa das linhas. Exemplo, na residência
2 7 2 tem uma bicicleta e um carro, cada um veículo em uma linha. A variável qtde
indica quantos veículos de determinado tipo existe em uma residencia e a
variável ano indica o ano de fabricação do veículo.
Meu objetivo principal e dispor as informações dos veículos em novas colunas, de
modo que elimine a duplicidade das residencias e ao mesmo tempo não perca
informações sobre os veículos. O resultado final que busco seria:
seq dv dom moto_bic carro tt_vei ano_m
1 9 1 2 1 3 2006
1 9 2 4 1 5 1998
1 9 4 4 0 5 2000
2 7 2 1 1 2 2008
2 7 3 1 3 4 2002
2 7 4 3 0 5 1998
Para chegar no resultado acima é necessário,
na variável moto_bic:
i) obter a quantidade de motos e de bicicletas da respectiva residencia
na variável carro:
ii) informar a quantidade de carros da respectiva residencia
na variável tt_vei:
iii) informar o total de veículos da residencia, valendo notar que como existe
outros veículos, apenas a soma das variáveis moto_bic com carro não é suficiente
na variável ano_m:
iv) informar o ano médio dos veículos de cada residencia
v) por fim, é necessário eliminar as residencias duplicadas.
Obs.: o data.frame (inv) criado para exemplificar o problema é pequeno, mas chego a
utilizar data.frames com mais de 1 milhão de linhas.
Desde já grato
Roney
Mais detalhes sobre a lista de discussão R-br