r - 如果组内全部缺失,R替换缺失值
问题描述
如果组中的所有值都丢失,我想从另一列中的值替换缺失值。这是示例,我认为会起作用。可以有无限数量的组。
library(tidyverse)
df <- tibble(ID = c("A", "A", "A", "B", "B", "B"),
val1 = c(1,2,3,4,5,6),
val2 = c(NA, NA, NA, NA, 2, 3))
df %>%
group_by(ID) %>%
mutate(val2 = ifelse(all(is.na(val2)), val1, val2))
# Groups: ID [2]
ID val1 val2
<chr> <dbl> <dbl>
1 A 1 1
2 A 2 1
3 A 3 1
4 B 4 NA
5 B 5 NA
6 B 6 NA
我想得到的是 val2 应该从 val1 中获取值,如果组中缺少所有 val2 值。现在看来,它给了我第一个价值。如果一切都没有丢失,就不应该发生任何事情。
Result:
# A tibble: 6 x 3
ID val1 val2
<chr> <dbl> <dbl>
1 A 1 1
2 A 2 2
3 A 3 3
4 B 4 NA
5 B 5 2
6 B 6 3
解决方案
这是否有效:
library(dplyr)
df %>% group_by(ID) %>% mutate(val2 = case_when(all(is.na(val2)) ~ val1, TRUE ~ val2))
# A tibble: 6 x 3
# Groups: ID [2]
ID val1 val2
<chr> <dbl> <dbl>
1 A 1 1
2 A 2 2
3 A 3 3
4 B 4 NA
5 B 5 2
6 B 6 3
推荐阅读
- delphi - How can I save a WhatsApp session using Delphi and Chromium?
- c++ - 混合来自不同 MSVC 的 DLL 时的不同行为
- gradle - gradle grails - 任务“:bootRun”执行失败
- android - 从 build.phonegap.com 下载速度慢
- excel - Primefaces DataExporter - XLSX 和 XLSXSTREAM
- java - 使用 jdbc ftp 驱动程序连接到 ftp 服务器
- c# - 使用 INSERT 将 DataGridView 中的十进制数字插入 MySQL
- android - 使用 Retrofit 解析 JSON 的模型结构
- amazon-web-services - 我可以为默认路由创建一个没有目标组(只想返回 404)的 ALB 侦听器吗
- php - AWS 上的 Laravel 队列工作者找不到工作