Controllare la funzione bind_rows
nel pacchetto dplyr
. Per impostazione predefinita, farà alcune cose carine, come riempire colonne esistenti in uno data.frame
ma non nell'altro con NA
s invece di fallire. Ecco un esempio:
# Use the dplyr package for binding rows and for selecting columns
library(dplyr)
# Generate some example data
a <- data.frame(a = rnorm(10), b = rnorm(10))
b <- data.frame(a = rnorm(5), c = rnorm(5))
# Stack data frames
bind_rows(a, b)
Source: local data frame [15 x 3]
a b c
1 2.2891895 0.1940835 NA
2 0.7620825 -0.2441634 NA
3 1.8289665 1.5280338 NA
4 -0.9851729 -0.7187585 NA
5 1.5829853 1.6609695 NA
6 0.9231296 1.8052112 NA
7 -0.58-0.6928449 NA
8 0.2033514 -0.6673596 NA
9 -0.8576628 0.5163021 NA
10 0.6296633 -1.2445280 NA
11 2.1693068 NA -0.2556584
12 -0.1048966 NA -0.3132198
13 0.2673514 NA -1.1181995
14 1.0937759 NA -2.5750115
15 -0.8147180 NA -1.5525338
per risolvere il problema nella sua interrogazione, si desidera selezionare per le colonne nel tuo padrone data.frame
prima. Se è il master e contiene i dati che si desidera aggiungere, è possibile utilizzare la funzione select
da dplyr
per ottenere prima le colonne necessarie.
# Select all columns in b with the same names as in master data, a
# Use select_() instead of select() to do standard evaluation.
b <- select_(b, names(a))
# Combine
bind_rows(a, b)
Source: local data frame [15 x 2]
a b
1 2.2891895 0.1940835
2 0.7620825 -0.2441634
3 1.8289665 1.5280338
4 -0.9851729 -0.7187585
5 1.5829853 1.6609695
6 0.9231296 1.8052112
7 -0.58-0.6928449
8 0.2033514 -0.6673596
9 -0.8576628 0.5163021
10 0.6296633 -1.2445280
11 2.1693068 NA
12 -0.1048966 NA
13 0.2673514 NA
14 1.0937759 NA
15 -0.8147180 NA
Se si utilizza 'dplyr', perché non usare solo' bind_rows() '? – ialm
@ialm Con una lettura più attenta, questa risposta * non * usa alcuna funzione 'dplyr' (carica solo il pacchetto). Vale la pena notare che il caricamento di 'plyr' * dopo * il caricamento di' dplyr' maschererà 'dplyr :: sumarize' e' dplyr :: mutate' con le versioni 'plyr' e non è raccomandato. – Gregor
@Gregor Sì, lo vedo ora. E per i motivi evidenziati nel tuo commento, viene emesso un avviso se carichi 'plyr' dopo' dplyr', e credo che Hadley consiglia di caricare 'plyr' prima di' dplyr' se hai mai bisogno di usare entrambi i pacchetti. – ialm