R 有条件地替换NA
这是我自己的补充版本,因为我无法通过评论清楚地解释它 只有2个R 有条件地替换NA,r,dplyr,R,Dplyr,这是我自己的补充版本,因为我无法通过评论清楚地解释它 只有2个农场,因此每个水果在下面的df中重复。我想用0替换NA,只要其中一种水果有一个值,比如在y2019的pear中有一个c(NA,7),我想输出c(0,7) 样本数据: 但是: 7在pear生产c(0,0)中被消灭 当两个农场都是NA #A tibble: 8 x 5 fruit farm y2019 y2018 y2017 <chr> <fct> <dbl> <dbl>
农场
,因此每个水果
在下面的df
中重复。我想用0
替换NA
,只要其中一种水果有一个值,比如在y2019
的pear
中有一个c(NA,7)
,我想输出c(0,7)
样本数据:
但是:
7
在pear
生产c(0,0)
中被消灭
NA
#A tibble: 8 x 5
fruit farm y2019 y2018 y2017
<chr> <fct> <dbl> <dbl> <dbl>
1 apple 1 0 5 4
2 apple 2 0 3 5
3 peach 1 3 0 7
4 peach 2 12 0 15
5 pear 1 0 8 0
6 pear 2 0 2 0
7 lime 1 4 0 0
8 lime 2 6 0 0
您可以尝试:
library(dplyr)
df %>%
group_by(fruit) %>%
mutate(across(where(is.numeric), ~ if(any(!is.na(.)))
replace(., is.na(.), 0) else .)) %>%
ungroup()
# A tibble: 8 x 5
# fruit farm y2019 y2018 y2017
# <chr> <fct> <dbl> <dbl> <dbl>
#1 apple 1 NA 5 4
#2 apple 2 NA 3 5
#3 peach 1 3 NA 7
#4 peach 2 12 NA 15
#5 pear 1 0 8 NA
#6 pear 2 7 2 NA
#7 lime 1 4 NA 1
#8 lime 2 6 NA 0
库(dplyr)
df%>%
组别(水果)%>%
变异(跨越(其中(is.numeric),~if(any(!is.na())
替换(,is.na(.),0)其他。))%>%
解组()
#一个tibble:8x5
#水果场y2019 y2018 y2017
#
#1苹果1 NA 5 4
#2苹果2 NA 3 5
#3桃13NA 7
#4桃2 12娜15
#5梨1 0 8 NA
#6梨2 7 2 NA
#7石灰1 4钠1
#8石灰2 6钠0
因此,只有当组中有任何值不是NA时,我们才将
替换为0。您可以尝试:
library(dplyr)
df %>%
group_by(fruit) %>%
mutate(across(where(is.numeric), ~ if(any(!is.na(.)))
replace(., is.na(.), 0) else .)) %>%
ungroup()
# A tibble: 8 x 5
# fruit farm y2019 y2018 y2017
# <chr> <fct> <dbl> <dbl> <dbl>
#1 apple 1 NA 5 4
#2 apple 2 NA 3 5
#3 peach 1 3 NA 7
#4 peach 2 12 NA 15
#5 pear 1 0 8 NA
#6 pear 2 7 2 NA
#7 lime 1 4 NA 1
#8 lime 2 6 NA 0
库(dplyr)
df%>%
组别(水果)%>%
变异(跨越(其中(is.numeric),~if(any(!is.na())
替换(,is.na(.),0)其他。))%>%
解组()
#一个tibble:8x5
#水果场y2019 y2018 y2017
#
#1苹果1 NA 5 4
#2苹果2 NA 3 5
#3桃13NA 7
#4桃2 12娜15
#5梨1 0 8 NA
#6梨2 7 2 NA
#7石灰1 4钠1
#8石灰2 6钠0
因此,只有当组中有任何值不是NA时,我们才将
替换为0。如果有任何非NA元素要替换为0或其他返回值,我们可以使用替换来自的替换为0
library(dplyr)
library(tidyr)
df %>%
group_by(fruit) %>%
mutate(across(where(is.numeric), ~ if(any(!is.na(.))) replace_na(., 0) else .)) %>%
ungroup()
# A tibble: 8 x 5
# fruit farm y2019 y2018 y2017
# <chr> <fct> <dbl> <dbl> <dbl>
#1 apple 1 NA 5 4
#2 apple 2 NA 3 5
#3 peach 1 3 NA 7
#4 peach 2 12 NA 15
#5 pear 1 0 8 NA
#6 pear 2 7 2 NA
#7 lime 1 4 NA 1
#8 lime 2 6 NA 0
如果有任何非na元素要替换为0或否则
返回值,我们可以使用替换na
fromtidyr
library(dplyr)
library(tidyr)
df %>%
group_by(fruit) %>%
mutate(across(where(is.numeric), ~ if(any(!is.na(.))) replace_na(., 0) else .)) %>%
ungroup()
# A tibble: 8 x 5
# fruit farm y2019 y2018 y2017
# <chr> <fct> <dbl> <dbl> <dbl>
#1 apple 1 NA 5 4
#2 apple 2 NA 3 5
#3 peach 1 3 NA 7
#4 peach 2 12 NA 15
#5 pear 1 0 8 NA
#6 pear 2 7 2 NA
#7 lime 1 4 NA 1
#8 lime 2 6 NA 0
library(dplyr)
library(tidyr)
df %>%
group_by(fruit) %>%
mutate(across(where(is.numeric), ~ if(any(!is.na(.))) replace_na(., 0) else .)) %>%
ungroup()
# A tibble: 8 x 5
# fruit farm y2019 y2018 y2017
# <chr> <fct> <dbl> <dbl> <dbl>
#1 apple 1 NA 5 4
#2 apple 2 NA 3 5
#3 peach 1 3 NA 7
#4 peach 2 12 NA 15
#5 pear 1 0 8 NA
#6 pear 2 7 2 NA
#7 lime 1 4 NA 1
#8 lime 2 6 NA 0
df %>%
group_by(fruit) %>%
mutate(across(where(is.numeric),
~ replace(., sum(!is.na(.)) > 0 & is.na(.), 0)))
# A tibble: 8 x 5
# Groups: fruit [4]
# fruit farm y2019 y2018 y2017
# <chr> <fct> <dbl> <dbl> <dbl>
#1 apple 1 NA 5 4
#2 apple 2 NA 3 5
#3 peach 1 3 NA 7
#4 peach 2 12 NA 15
#5 pear 1 0 8 NA
#6 pear 2 7 2 NA
#7 lime 1 4 NA 1
#8 lime 2 6 NA 0