2016-07-29 96 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> 

我想与在列first_name的值来替换在指定的last_name列中的每个NA的值。 我看到了类似的帖子在这个链接

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

已经回答[here](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