我是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
}
答案 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值。