[英]Recode and sum to NA when all values are NA in R
当每个id
的总和中所有列都为空时,我需要分配NA
。
这是我的示例数据集的样子;
df <- data.frame(id = c(1,2,3),
i1 = c(1,NA,0),
i2 = c(1,NA,1),
i3 = c(1,NA,0),
total = c(3,0,1))
> df
id i1 i2 i3 total
1 1 1 1 1 3
2 2 NA NA NA 0
3 3 0 1 0 1
对于第二个id
,总数应该是NA
而不是 0,因为第二个 id 的所有值都是 NA。 如何将数据集更改为以下内容?
> df1
id i1 i2 i3 total
1 1 1 1 1 3
2 2 NA NA NA NA
3 3 0 1 0 1
我们可以在case_when
中使用if_all
创建一个条件,当一行的所有列值均为 NA 时返回NA
,或者使用na.rm = TRUE
执行rowSums
library(dplyr)
df %>%
mutate(total = case_when(if_all(i1:i3, is.na) ~ NA_real_,
TRUE ~ rowSums(across(i1:i3), na.rm = TRUE)))
-输出
id i1 i2 i3 total
1 1 1 1 1 3
2 2 NA NA NA NA
3 3 0 1 0 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.