Mam znacznie większą istniejącą ramkę danych. Dla tego mniejszego przykładu chciałbym zastąpić niektóre zmienne (zamień stan (df1)) na newstate (df2) zgodnie z kolumną "first". Mój problem polega na tym, że wartości są zwracane jako NA, ponieważ tylko niektóre nazwy są dopasowywane w nowej ramce danych (df2).Mieć wartość zwracaną przez nomatch, używając funkcji dopasowywania w R
Istniejące dataframe:
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
New dataframe dopasować do istniejących dataframe
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
próbował użyć mecz, ale zwraca NA dla "państwa", w którym dopasowanie "pierwszy" zmienna z df2 nie jest znalezione w oryginalnej ramce danych.
df1$state <- df2$newstate[match(df1$first, df2$first)]
first state
1 Jim TX
2 Mick LA
3 Paul <NA>
4 Ron <NA>
Czy istnieje sposób, aby zignorować nomatch lub zmusić nomatch do zwrotu istniejącej zmiennej tak jak jest? Byłby to przykład pożądanego rezultatu: stany Jim/Mick są aktualizowane, podczas gdy stan Paula i Rona nie ulega zmianie.
first state
1 Jim TX
2 Mick LA
3 Paul OR
4 Ron AZ
Twój kod działa. [Dziękuję.] Ale czy możesz wyjaśnić, dlaczego masz' indx! = 0' po lewej stronie równych i 'indx' na prawa strona równości? 'df1 $ state [indx! = 0] <- df2 $ newstate [indx]' –