Ho un dataframe esistente molto più grande. Per questo esempio più piccolo vorrei sostituire alcune delle variabili (sostituire lo stato (df1)) con newstate (df2) in base alla colonna "first". Il mio problema è che i valori vengono restituiti come NA poiché solo alcuni nomi sono abbinati nel nuovo dataframe (df2).Hanno un valore di ritorno nomatch poiché utilizza la funzione di corrispondenza in R
dataframe esistente:
state = c("CA","WA","OR","AZ")
first = c("Jim","Mick","Paul","Ron")
df1 <- data.frame(first, state)
first state
1 Jim CA
2 Mick WA
3 Paul OR
4 Ron AZ
Nuovo dataframe da abbinare a dataframe esistente
state = c("CA","WA")
newstate = c("TX", "LA")
first =c("Jim","Mick")
df2 <- data.frame(first, state, newstate)
first state newstate
1 Jim CA TX
2 Mick WA LA
provato ad usare partita, ma restituisce NA per "stato" in cui un matching "prima" variabile da DF2 non è trovato nel dataframe originale.
df1$state <- df2$newstate[match(df1$first, df2$first)]
first state
1 Jim TX
2 Mick LA
3 Paul <NA>
4 Ron <NA>
Esiste un modo per ignorare NoMatch o hanno NoMatch restituire la variabile esistente così com'è? Questo sarebbe un esempio del risultato desiderato: gli stati di Jim/Mick vengono aggiornati mentre lo stato di Paul e Ron non cambiano.
first state
1 Jim TX
2 Mick LA
3 Paul OR
4 Ron AZ
Il codice funziona. [Grazie.] Per favore, puoi spiegare perché hai' indx! = 0' sul lato sinistro degli uguali e 'indx' su il lato destro degli uguali? 'df1 $ stato [indx! = 0] <- df2 $ newstate [indx]' –