r - 用 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
谁能向我解释为什么我收到这些错误以及如何解决它们?
非常感谢任何帮助:)
解决方案
您还需要子集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"))
推荐阅读
- c++ - wchar_t 字符串数组的成员缺失
- python - 试图让 python 程序从网络抓取中打印出选定的统计数据
- python - 在指定索引上将两个数据帧相乘
- java - Java 异常 java.sql.SQLException: HikariDataSource HikariDataSource (HikariPool-1) 已关闭
- python - 无法 Webscrape 下拉项 [Python][beautifulsoup]
- reactjs - 在 React-Apollo-client 中获取重复响应
- javascript - 得到 $max 的字符串
- css - 材料步进控制 - 减少标题之间的空间
- amazon-ec2 - Jar 文件的图像未显示在网络中
- jquery - 数据表仅返回选择事件的最后一行