[R-br] Cruzamento para alinhar duas matrizes com colunas iguais, mas dimensões diferentes

Karina Rebuli karina.rebuli em gmail.com
Sexta Fevereiro 10 19:48:55 BRST 2017


Oi, Adriele!

library( dplyr )
C <- inner_join( A, B, by = c( "x", "y" ) ) %>%
  select( x, y, z = z.x )

A primeira função faz a "junção" (JOIN) que você quer, depois o select
"seleciona" e renomeia as colunas para já deixar a saída como você precisa.

De qualquer forma, sugiro que veja as funções da "família" join do dplyr
para ver se é isso o que precisa. Mas tem uma img que vale por qualquer
explicação para ajudar a escolher os joins:
https://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg

São as funções de JOIN de bancos de dados relacionais, mas o raciocínio é o
mesmo.

Abs,
Karina



On Fri, Feb 10, 2017 at 6:08 PM Adriele Giaretta Biase via R-br <
r-br em listas.c3sl.ufpr.br> wrote:

> Pessoal, boa tarde!
>
> eu preciso comparar duas matrizes de dados (A e B) , que possuem três
> colunas (x, y, z).
>
> O número de linhas matriz A é superior que o número de linhas da  matriz
> B.
>
> As duas matrizes A e B possuem as colunas x e y com valores iguais,
> ressalvo que na matriz A, existe um número de linhas maior que na matriz B.
>
> Nunca existirá linhas com valores exatamente iguais, considerando a
> combinação entre x e y, respectivamente.
>
> Eu gostaria de saber como obter uma nova matriz C, que remova da matriz A,
> as linhas que não estão na matriz B, obtendo as mesmas colunas x, y e z,
>  respectivamente.
>
> Didaticamente, eu queria obter a seguinte matriz C,  com as linhas com os
> valores comuns  entre A e B (das colunas x e y), ressalvando
> respectivamente os valores de z da planilha original A.
>
> A=
>
> x
>
> y
>
> z
>
> 1
>
> 1
>
> 2.3
>
> 2
>
> 1
>
> 1.4
>
> 3
>
> 1
>
> 2.5
>
> 1
>
> 2
>
> 7.8
>
> 2
>
> 2
>
> 9.1
>
> 3
>
> 2
>
> 0
>
> 1
>
> 3
>
> 2
>
> 2
>
> 3
>
> 4.5
>
> 3
>
> 3
>
> 8
>
> B=
>
> x
>
> y
>
> z
>
> 2
>
> 1
>
> 7
>
> 3
>
> 1
>
> 6.3
>
> 1
>
> 2
>
> 9
>
> 2
>
> 2
>
> 7.4
>
> 3
>
> 2
>
> 13.5
>
> 2
>
> 3
>
> 12
>
> 3
>
> 3
>
> 11
>
> C=
>
> x
>
> y
>
> z
>
> 2
>
> 1
>
> 1.4
>
> 3
>
> 1
>
> 2.5
>
> 1
>
> 2
>
> 7.8
>
> 2
>
> 2
>
> 9.1
>
> 3
>
> 2
>
> 0
>
> 2
>
> 3
>
> 4.5
>
> 3
>
> 3
>
> 8
>
>
>
> Agradeço de alguém puder me ajudar, caso já tenha alguma função no R, que
> faça isso.
>
>
> A função *match(x,y) *funciona se for apenas com vetor (uma coluna
> apenas).
>
>
> *match(x,y):* ele cruza o vetor x com o vetor y. Ele retorna um vetor do
> tamanho de x, informando o índice em y no qual se encontram os elementos de
> x. Caso contrário, ele informa NA.
>
> --
> Adriele Giaretta Biase.
> Mestre em  Estatística e Experimentação Agropecuária - UFLA.
> Doutora em Estatística e Experimentação Agronômica - ESALQ/ USP
> Contato: (19) 98861-0619.
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20170210/b0160855/attachment.html>


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