2016-07-29 5 views
-1

У меня есть Дада кадр это небольшая часть:Замена NA со значениями в соседнем столбце

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> 

Я хотел бы заменить каждое значение NA в колонке под названием last_name со значением в first_name колонки. Я видел аналогичный пост в это ссылка

Replace NA in column with value in adjacent column

Я попытался использовать то, что они suggeted

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

Это ничего не меняет, как из столбцов типа символов так что его не проблема переменной типа фактора

+0

Вы заменяете значения NA самими. Попробуйте 'namess $ last_name [is.na (namess $ last_name)] <- as.character (namess $ first_name [is.na (namess $ last_name)])' – dww

+1

Этого уже было сказано [здесь] (http: // stackoverflow.com/questions/15629885/replace-na-in-column-with-value-in-adjacent-column?rq=1) –

ответ

0

ifelse должен предоставить вам то, что вы ищете здесь, хотя я не могу сказать наверняка без воспроизводимого примера:

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

+0

Более «R» способ сделать это будет использовать подмножество - см. другой ответ, связанный в комментариях выше. –

+0

Вы правы - я предложил 'ifelse', потому что я думаю, что это немного более разборчиво, и его отсутствие повторения не поддается такому виду, как ошибки копирования/вставки, которые в первую очередь привели к запуску OP. – nickbloom

2

Мы можем использовать data.table. Преобразуйте 'data.frame' в 'data.table' (setDT(namess)), в i, мы используем логическое условие (is.na(last_name)) и присваиваем (:=) те элементы в 'first_name', которые соответствуют условию 'last_name'.

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 
Смежные вопросы