[英]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"))
我们可以使用来自fcase
的data.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.