将R中数据框中的一列中的'NA'值替换为同一数据框中另一列中的值

时间:2018-10-30 09:43:43

标签: r dataframe replace na

我是R编程的新手。我读了一个csv文件。我想将某列中的某些“ NA”值替换为其他列中同一行中的值。因此,我编写了如下所示的“ if语句”,但是该列中的所有值都将替换为另一列中的值,而不是仅替换“ NA”值。这里可能出什么问题了?欢迎任何帮助。 数据看起来像

Group   Skill
 A1      ABC
 A1      ABC
 A1      ABC
 A1      ABC
 A1       
 A1      
 A1       
 A1

所需的结果是

 Group   Skill
 A1      ABC
 A1      ABC
 A1      ABC
 A1      ABC
 A1      A1
 A1      A1
 A1      A1
 A1      A1

我现在得到的结果

Group   Skill
 A1      A1
 A1      A1
 A1      A1
 A1      A1
 A1      A1
 A1      A1
 A1      A1
 A1      A1

我写的if语句是

df<- read.csv("Data.csv",header=T,na.strings=c(""))
if (is.na(df$Skill)) {
    df$Skill <- df$Group
      }

2 个答案:

答案 0 :(得分:0)

一种选择是使用coalesce包中的dplyr函数:

require(dplyr)
df$Skill = coalesce(df$Skill, df$Group)

对于Skill具有非NA值的行,该值将保持不变。否则,NA将替换为Group列中的任何内容。

答案 1 :(得分:0)

这是具有R子集的解决方案:

    df$Skill[is.na(df$Skill)] <- df$Group[is.na(df$Skill)]

或使用 dplyr

    library(dplyr)
    df %>% mutate(Skill = ifelse(is.na(Skill, Group, Skill))

如果Skill为NA,则采用组值;如果存在Skill值,则采用Skill值。