首页 > 解决方案 > 用 r 中的 DataFrame 中的 if-else 替换 NA

问题描述

我正在尝试使用 DataFrame 中的 if-else 根据另一列中的值将列中的 NA 替换为“A”、“B”或“C”。

我试过了:

df$grade[is.na(df$grade)] <- ifelse(df$score >= 28, "C", ifelse(df$score < 14, "A", "B"))

但出现错误:

number of items to replace is not a multiple of replacement length

然后,我尝试了另一个代码:

df1 <- replace(is.na(df$grade), ifelse(df$score >= 28, "C", ifelse(df$score < 14, "A", "B")))

但也报错:

Error in replace(is.na(df$grade), ifelse(df$score >= 28, "C", : argument "values" is missing, with no default

谁能向我解释为什么我收到这些错误以及如何解决它们?

非常感谢任何帮助:)

标签: rdataframe

解决方案


您还需要子集score

inds <- is.na(df$grade)
df$grade[inds] <- with(df,ifelse(score[inds] >= 28, "C", ifelse(score[inds] < 14, "A", "B")))

可能,使用case_when会使它更清洁。

library(dplyr)
df %>%
  mutate(grade = case_when(!is.na(grade) ~ grade, 
                           score >= 28 ~ "C",
                           score < 14, "A", 
                           TRUE ~ "B"))

推荐阅读