/ / Como adicionar elementos de colunas compartilhadas entre dois quadros de dados em R - r, mesclar, combinar

Como adicionar elementos de colunas compartilhadas entre dois quadros de dados em R - r, mesclar, combinar

Eu tenho dois quadros de dados:

Dataframe # 1

A   B   C   D   E
2   1   0   5   7

e

Dataframe # 2

C   E   F   G
3   1   0   9

Gostaria de combinar os dois quadros de dados para que o primeiro quadro de dados sirva como referência e as colunas em comum sejam adicionadas

A solução deve se parecer com:

A   B   C   D   E
2   1   3   5   8

Observe os elementos das colunas compartilhadas(colunas C e E) foram adicionadas e as colunas extras no Dataframe # 2 (colunas F e G) foram ignoradas porque não foram encontradas no Dataframe # 1. Cada Dataframe possui uma única linha.

Eu tentei fazer isso com o nativofunções no R e no pacote de mesclagem, mas não tive sorte. No meu aplicativo, preciso combinar milhares de colunas, muitas das quais são compartilhadas entre os dois quadros de dados, por isso estou trabalhando no desenvolvimento de uma solução robusta.

Obrigado!

Respostas:

3 para resposta № 1

Isso deve funcionar:

overlap = intersect(names(df1), names(df2))
df1[overlap] = df1[overlap] + df2[overlap]

Ele assume que o número de linhas nos quadros de dados é o mesmo em cada quadro de dados.


1 para resposta № 2

Pode ser mais fácil converter primeiro do formato amplo para o longo, executar as operações e depois converter novamente. Por exemplo, usando dplyr e tidyr:

library(dplyr)
library(tidyr)
df1 <- data.frame(A = 2, B = 1, C = 0, D = 5, E = 7)
df2 <- data.frame(C = 3, E = 1, F = 0, G = 9)

df1 %>%
gather(variable, value) %>%
left_join(gather(df2, variable, value), by = "variable") %>%
rowwise() %>%
mutate(sum = sum(value.x, value.y, na.rm = TRUE)) %>%
select(variable, sum) %>%
spread(variable, sum)

O que isso faz: coloca variáveis ​​de df1 em 1 coluna e seus valores em outra; faz o mesmo com o df2; combina df1 e df2 usando df1 como referência; soma os valores para cada variável; seleciona a coluna da variável e os novos valores (somas); converte de volta para o formato amplo.

Resultado:

# A tibble: 1 × 5
A     B     C     D     E
* <dbl> <dbl> <dbl> <dbl> <dbl>
1     2     1     3     5     8

Em geral, quando você tem a mesma medida para várias variáveis ​​em várias colunas, vale a pena considerar se o formato longo é uma melhor representação dos dados.