繁体   English   中英

在 r 中将 NA 替换为 DataFrame 中的 if-else

[英]Replace NA with if-else in DataFrame in r

我正在尝试使用 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

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

非常感谢任何帮助:)

您还需要对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"))

我们可以使用来自fcasedata.table

library(data.table)
setDT(df)[, grade := fcase(is.na(grade), grade,
                          score >= 28, 'C',
                          score < 14, 'A',
                            'B')]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM