r - 使用 mutate (ifelse()) 创建新变量,但由于 NA 而得到错误答案
问题描述
我想创建一个新变量 c。第1步,如果a=1则c=1(不管b);步骤 2,如果 a=2 或 b=2,则 c=2。
a <- c (2, 2, 2, NA, NA, NA, 1, 1, 1)
b <- c (1, 2, NA, 1, 2, NA, 1, 2, NA)
ab <- data.frame (a, b)
abc <- ab %>%
mutate (c = ifelse (a == 1, 1, NA)) %>%
mutate (c = ifelse (a == 2 | b == 2, 2, c))
abc
a b c
1 2 1 2
2 2 2 2
3 2 NA 2
4 NA 1 NA
5 NA 2 2
6 NA NA NA
7 1 1 1
8 1 2 2
9 1 NA NA
我希望 c 为 (2,2,2,NA,2,NA,1,2,1),但实际输出为 (2,2,2,NA,2,NA,1,2,NA) . 为什么最后一个单元格更改为 NA(应该是 1)?
解决方案
这似乎是一个好地方case_when
,它评估每个案例,直到找到一个TRUE
。如果您希望第 8 行为 2,听起来这两个条件应该交换。
library(dplyr)
abc <- ab %>%
mutate(c = case_when(a == 2 | b == 2 ~ 2,
a == 1 ~ 1,
TRUE ~ NA_real_))
#> abc
# a b c
#1 2 1 2
#2 2 2 2
#3 2 NA 2
#4 NA 1 NA
#5 NA 2 2
#6 NA NA NA
#7 1 1 1
#8 1 2 2
#9 1 NA 1
推荐阅读
- jquery - jquery smoothscroll 在 chrome 上不起作用
- swift - 将已“发布”帖子的用户个人资料图像加载到表格视图中
- node.js - 使用 discord bot 在聊天中读取文件
- android - 片段内的 setSupportActionBar
- javascript - 如何在javascript中设置按钮值
- ios - Swift MKCircle 覆盖
- sql - 在存储过程中运行时出现奇怪的代码行为,但在存储过程之外运行正常
- r - 输入所有配对组合的嵌套 for 循环的向量化
- python - 猎鹰cors没有返回正确的标题
- java - 如何从 Java Hashmap 为 pojo 类设置值