用相邻列中的值替换NA

时间:2016-07-29 22:49:17

标签: r replace na

我有一个dada框架,这只是一小部分:

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>

我想将名为last_name的列中的每个NA值替换为first_name列中的值。 我在这里看到一个类似的帖子是链接

Replace NA in column with value in adjacent column

我尝试使用他们建议的内容

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

它没有改变任何东西,两个列都是字符类型所以它不是一个因子类型变量的问题

2 个答案:

答案 0 :(得分:2)

我们可以使用data.table。转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(namess)),在i中,我们使用逻辑条件(is.na(last_name))并在&#39; first_name&#39;中分配(:=)这些元素。对应于&#39; last_name&#39;的条件。

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

答案 1 :(得分:0)

ifelse应该在这里为您提供您所需要的内容,但如果没有可重复的示例我无法肯定地说:

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