2016-07-29 41 views
-1

ich einen dada Rahmen habe dies ist ein kleiner Teil:Ersetzen NA mit den Werten in der benachbarten Spalte

namess[270:285,] 
    first_name last_name 
270   R  Horne 
271   T   H 
272   A  McEvoy 
273 Aumoitte  <NA> 
274  Johin  <NA> 
275 Waydelick  <NA> 
276 Vigneron  <NA> 
277 Sautereau  <NA> 
278  Johin  <NA> 
279 Aumoitte  <NA> 
280 Georges Taillandier 
281 Fernand  Sanz 
282  John  Lake 
283  Louis  Bastien 
284  Louis Hildebrand 
285 Daumain  <NA> 

Ich mag jeden NA-Wert in der Spalte mit dem Namen last_name mit dem Wert in dem Spalte vornamen ersetzen. sah ich einen ähnlichen Eintrag in dem der Link

Replace NA in column with value in adjacent column

ist habe ich versucht, mit was sie suggeted

namess$last_name[is.na(namess$last_name)] <- as.character(namess$last_name[is.na(namess$last_name)]) 

Es hat nichts ändern, die beide Spalten sind Zeichentyp so dass ihr nicht ein Problem, eine Faktor-Typ-Variable zu sein

+0

Sie ersetzen die NA-Werte durch sie selbst. Versuchen Sie 'name $ last_name [is.na (name $ last_name)] <- as.character (name $ first_name [is.na (name $ last_name)])' – dww

+1

Dies wurde bereits beantwortet [hier] (http: // stackoverflow.com/questions/15629885/replace-na-in-column-with-value-in-adjacent-column?rq=1) –

Antwort

0

ifelse sollte Ihnen geben, was Sie hier suchen, obwohl ich nicht ohne ein reproduzierbares Beispiel sicher sagen kann:

namess$last_name <- ifelse(is.na(namess$last_name), namess$first_name, namess$last_name)

+0

Ein "R" Weg dies zu tun wäre Subsetting zu verwenden - siehe die anderen Antwort in den obigen Kommentaren verlinkt. –

+0

Sie haben Recht - ich habe 'ifelse' vorgeschlagen, weil ich denke, dass es etwas lesbarer ist, und seine fehlende Wiederholung eignet sich nicht so sehr für die Art von Kopier-/Einfügefehlern, die OP in die Irre führten. – nickbloom

2

Wir können data.table verwenden. Konvertieren Sie 'data.frame' in 'data.table' (setDT(namess)), in der i verwenden wir die logische Bedingung (is.na(last_name)) und weisen (:=) die Elemente in 'first_name' zu, die der Bedingung zu 'last_name' entsprechen.

library(data.table) 
setDT(namess)[is.na(last_name), last_name := first_name] 
namess 
# first_name last_name 
# 1:   R  Horne 
# 2:   T   H 
# 3:   A  McEvoy 
# 4: Aumoitte Aumoitte 
# 5:  Johin  Johin 
# 6: Waydelick Waydelick 
# 7: Vigneron Vigneron 
# 8: Sautereau Sautereau 
# 9:  Johin  Johin 
#10: Aumoitte Aumoitte 
#11: Georges Taillandier 
#12: Fernand  Sanz 
#13:  John  Lake 
#14:  Louis  Bastien 
#15:  Louis Hildebrand 
#16: Daumain  Daumain