仅在非空组中将NA替换为零

问题描述 投票:0回答:1

我有一个应该很容易解决的问题,但我根本无法解决。我有一个包含组和变量的庞大数据集。对于该变量,有些组为空(仅填充NA),有些包含值,但也包含NA。

例如:

ID <- c("A1","A1","A1","A1","B1","B1","B1","B1", "B1", "C1", "C1", "C1")
Value1 <- c(0,2,1,1,NA,1,1,NA,1,NA,NA,NA)
data <- data.frame(ID, Value1)

我想将所有NA都更改为零,但仅在包含信息的组中更改。

所以像这样:

ID <- c("A1","A1","A1","A1","B1","B1","B1","B1","B1","C1","C1","C1")
Value1 <- c(0,2,1,1,0,1,1,0,1,NA,NA,NA)

我尝试使用group_by(ID)并以条件max(Value1)>“ replace”> = 0,但max()不能作为条件使用,或者不适用于NA。不幸的是,我在工作中经常需要这种条件,所以我也希望对任何建议有最好的选择,以便有选择地对待团体。

r replace group-by na
1个回答
0
投票

您可以使用简单的if语句,即。

library(dplyr)

data %>% 
 group_by(ID) %>% 
 mutate(Value1 = if (all(is.na(Value1))){Value1}else{replace_na(Value1, 0)})

给出,

# A tibble: 12 x 2
# Groups:   ID [3]
   ID    Value1
   <fct>  <dbl>
 1 A1         0
 2 A1         2
 3 A1         1
 4 A1         1
 5 B1         0
 6 B1         1
 7 B1         1
 8 B1         0
 9 B1         1
10 C1        NA
11 C1        NA
12 C1        NA
© www.soinside.com 2019 - 2024. All rights reserved.