Desidero sommare in modo efficiente le voci di due frame di dati, sebbene non sia garantito che i frame di dati abbiano le stesse dimensioni o nomi di colonna. Unire non è davvero quello che sto cercando qui. Invece voglio creare un oggetto di output con tutti i nomi di riga e di colonna che appartengono a uno dei frame di dati aggiunti. In ciascuna posizione di tale uscita, voglio usare la logica seguente per il valore calcolato:Aggiungere (non unire!) Due frame di dati con righe e colonne non uguali
- Se un abbinamento riga/colonna appartiene ad entrambi i frame di dati di ingresso voglio l'uscita di includere la loro somma
- Se un accoppiamento di righe/colonne appartiene a un solo frame di dati di input Voglio includere quel valore nell'output
- Se un accoppiamento riga/colonna non appartiene a nessuna matrice di input, voglio avere 0 in quella posizione nell'output.
A titolo di esempio, si considerino i seguenti frame di dati in ingresso:
df1 = data.frame(x = c(1,2,3), y = c(4,5,6))
rownames(df1) = c("a", "b", "c")
df2 = data.frame(x = c(7,8), z = c(9,10), w = c(2, 3))
rownames(df2) = c("a", "d")
> df1
x y
a 1 4
b 2 5
c 3 6
> df2
x z w
a 7 9 2
d 8 10 3
Voglio che il risultato finale sia
> df2
x y z w
a 8 4 9 2
b 2 5 0 0
c 3 6 0 0
d 8 0 10 3
Quello che ho fatto finora -
bind_rows/bind_cols in dplyr può lanciare il seguente: "Errore: numero incompatibile di righe (3, in attesa di 2)"
Ho nomi di colonne duplicati, quindi "unione" non funziona per i miei scopi - restituisce un df vuoto per qualche motivo.
Bene, @DavidArenburg merita davvero il merito, dato che lo stavo rendendo molto più complicato di quanto non fosse necessario. – eipi10