/ / Как да добавите елементи от колони, споделени между два информационни рамки в R - r, сливане, съвпадение

Как да добавите елементи от колони, споделени между два информационни рамки в R - r, сливане, съвпадение

Имам два информационни рамки:

Информационна рамка # 1

A   B   C   D   E
2   1   0   5   7

и

Данъчна рамка # 2

C   E   F   G
3   1   0   9

Бих искал да комбинирам двата информационни рамки, така че 1-ия информационен кадър служи като референтен и общите колони се добавят заедно

Решението трябва да изглежда така:

A   B   C   D   E
2   1   3   5   8

Обърнете внимание на елементите на споделените колони(колони С и Е), а допълнителните колони в Dataframe # 2 (колони F и G) бяха игнорирани, защото не бяха намерени в Dataframe # 1. Всеки Dataframe има един ред.

Опитвах се да постигна това с местнияфункции в R, както и пакета за сливане, но аз не съм имал късмет.В моята кандидатура трябва да комбинирате хиляди колони, много от които са споделени между двете dataframes, така че аз работя върху разработването на стабилно решение.

Благодаря!

Отговори:

3 за отговор № 1

Това трябва да работи:

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

Предполага се, че броят на редовете в кадрите с данни е еднакъв във всеки информационен кадър.


1 за отговор № 2

Може да е по-лесно да преобразувате от широк към дълъг формат, да извършите операциите и след това да ги превърнете обратно. Например, използвайки dplyr и 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)

Какво прави това: поставя променливи от df1 в 1 колона и техните стойности в друга; прави същото и за df2; комбинира df1 и df2 като използва df1 за справка; сумира стойностите за всяка променлива; избира променливата колона и новите стойности (суми); преобразува обратно в широк формат.

Резултат:

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

По принцип, когато имате няколко измервания за много променливи в много колони, струва си да прецените дали дългият формат е по-добро представяне на данните.