用dplyr将r中的所有NAs替换为-1

用dplyr将r中的所有NAs替换为-1,r,dplyr,r-mice,R,Dplyr,R Mice,我目前正与R中的tidyverse合作。在使用mice估算NAs后,一些列仍然有NAs,因为它们一开始的填充情况很差(我相信)。作为最后检查,我想用-1替换所有剩余的NAs。它通常只发生在单个列中,具体取决于数据集。长话短说,我在多个地点执行相同的过程,有时Col1在A区填充得非常好,但在B区填充得很差 目前我正在做以下工作 Clean.df <- df %>% mutate( coalesce(Col1 ,-1), c

我目前正与R中的tidyverse合作。在使用mice估算NAs后,一些列仍然有NAs,因为它们一开始的填充情况很差(我相信)。作为最后检查,我想用-1替换所有剩余的NAs。它通常只发生在单个列中,具体取决于数据集。长话短说,我在多个地点执行相同的过程,有时Col1在A区填充得非常好,但在B区填充得很差

目前我正在做以下工作

    Clean.df <- df %>% mutate(
              coalesce(Col1 ,-1),
              coalesce(Col2, -1),
              ....)
Clean.df%变异(
聚结(Col1,-1),
聚结(Col2,-1),
....)
我在31个专栏中这样做,这让我觉得一定有更简单的方法。我试图阅读coalesce文档,并试图用数据帧的名称替换它,但没有成功


谢谢你的洞察力

由于您没有提供任何数据,我使用一个示例数据框来展示如何用给定值(
-1
)替换数据框中的每个
NA
):

库(tidyverse)
#创建示例数据集
示例_df#A tibble:83 x 11
#>名称属vore阶守恒睡眠\总睡眠\ rem睡眠\周期
#>                                  
#>1芝士~Acin~肉鸡~lc 12.1 NA NA
#>2猫头鹰~Aotus omni Prim~17 1.8 NA
#>3月~Aplo~herbi Rode~nt 14.4 2.4 NA
#>4格雷亚~Blar~omni Sori~lc 14.9 2.3 0.133
#>5头母牛,家养4头,0.7头,0.667头
#>6 Thre~Brad~herbi Pilo~14.42.20.767
#>7 Nort~Call~carni Carn~vu 8.7 1.4 0.383
#>8辆Vesp~Calo~Rode~7辆NA
#>9犬只肉质犬~家养10.1 2.9 0.333
#>10 Roe~Capr~herbi Arti~lc 3 NA
#> # ... 还有73行和3个变量:awake,brainwt,
#>#车身重量
#将NAs替换为-1
purrr::map_dfr(.x=示例_df,
.f=~tidyr::替换_na(数据=,-1))
#>#A tibble:83 x 11
#>名称属vore阶守恒睡眠\总睡眠\ rem睡眠\周期
#>                                  
#>1芝士~Acin~肉鸡~lc12.1-1-1
#>2猫头鹰~Aotus omni Prim~-1171.8-1
#>3 Moun~Aplo~herbi Rode~nt 14.4 2.4-1
#>4格雷亚~Blar~omni Sori~lc 14.9 2.3 0.133
#>5头母牛,家养4头,0.7头,0.667头
#>6 Thre~Brad~herbi Pilo~-114.42.20.767
#>7 Nort~Call~carni Carn~vu 8.7 1.4 0.383
#>8 Vesp~Calo~-1 Rode~-17-1-1
#>9犬只肉质犬~家养10.1 2.9 0.333
#>10罗~Capr~herbi Arti~lc 3-1-1
#> # ... 还有73行和3个变量:awake,brainwt,
#>#车身重量

由(v0.2.1)

创建于2018-10-10,由于您没有提供任何数据,我使用一个示例数据框来展示如何将数据框中的每个
NA
替换为给定值(
-1
):

库(tidyverse)
#创建示例数据集
示例_df#A tibble:83 x 11
#>名称属vore阶守恒睡眠\总睡眠\ rem睡眠\周期
#>                                  
#>1芝士~Acin~肉鸡~lc 12.1 NA NA
#>2猫头鹰~Aotus omni Prim~17 1.8 NA
#>3月~Aplo~herbi Rode~nt 14.4 2.4 NA
#>4格雷亚~Blar~omni Sori~lc 14.9 2.3 0.133
#>5头母牛,家养4头,0.7头,0.667头
#>6 Thre~Brad~herbi Pilo~14.42.20.767
#>7 Nort~Call~carni Carn~vu 8.7 1.4 0.383
#>8辆Vesp~Calo~Rode~7辆NA
#>9犬只肉质犬~家养10.1 2.9 0.333
#>10 Roe~Capr~herbi Arti~lc 3 NA
#> # ... 还有73行和3个变量:awake,brainwt,
#>#车身重量
#将NAs替换为-1
purrr::map_dfr(.x=示例_df,
.f=~tidyr::替换_na(数据=,-1))
#>#A tibble:83 x 11
#>名称属vore阶守恒睡眠\总睡眠\ rem睡眠\周期
#>                                  
#>1芝士~Acin~肉鸡~lc12.1-1-1
#>2猫头鹰~Aotus omni Prim~-1171.8-1
#>3 Moun~Aplo~herbi Rode~nt 14.4 2.4-1
#>4格雷亚~Blar~omni Sori~lc 14.9 2.3 0.133
#>5头母牛,家养4头,0.7头,0.667头
#>6 Thre~Brad~herbi Pilo~-114.42.20.767
#>7 Nort~Call~carni Carn~vu 8.7 1.4 0.383
#>8 Vesp~Calo~-1 Rode~-17-1-1
#>9犬只肉质犬~家养10.1 2.9 0.333
#>10罗~Capr~herbi Arti~lc 3-1-1
#> # ... 还有73行和3个变量:awake,brainwt,
#>#车身重量

由(v0.2.1)于2018年10月10日创建

作为Indrajeet答案的替代方案,该答案是纯粹的
dplyr
。使用Indrajeet建议的
ggplot2::msleep

library(dplyr)
ggplot2::msleep %>%
  mutate_at(vars(sleep_rem, sleep_cycle), ~ if_else(is.na(.), -1, .))
# # A tibble: 83 x 11
#    name  genus vore  order conservation sleep_total sleep_rem sleep_cycle awake
#    <chr> <chr> <chr> <chr> <chr>              <dbl>     <dbl>       <dbl> <dbl>
#  1 Chee~ Acin~ carni Carn~ lc                  12.1      -1        -1      11.9
#  2 Owl ~ Aotus omni  Prim~ <NA>                17         1.8      -1       7  
#  3 Moun~ Aplo~ herbi Rode~ nt                  14.4       2.4      -1       9.6
#  4 Grea~ Blar~ omni  Sori~ lc                  14.9       2.3       0.133   9.1
#  5 Cow   Bos   herbi Arti~ domesticated         4         0.7       0.667  20  
#  6 Thre~ Brad~ herbi Pilo~ <NA>                14.4       2.2       0.767   9.6
#  7 Nort~ Call~ carni Carn~ vu                   8.7       1.4       0.383  15.3
#  8 Vesp~ Calo~ <NA>  Rode~ <NA>                 7        -1        -1      17  
#  9 Dog   Canis carni Carn~ domesticated        10.1       2.9       0.333  13.9
# 10 Roe ~ Capr~ herbi Arti~ lc                   3        -1        -1      21  
# # ... with 73 more rows, and 2 more variables: brainwt <dbl>, bodywt <dbl>
请注意,我不再使用
dplyr::if_else
,因为函数需要对不同的类型具有通用性(或不知道)。因为
base::ifelse
将愉快地/无声地(/slopply?)con
ggplot2::msleep %>%
  mutate_all(~ ifelse(is.na(.), -1, .))
# # A tibble: 83 x 11
#    name  genus vore  order conservation sleep_total sleep_rem sleep_cycle awake
#    <chr> <chr> <chr> <chr> <chr>              <dbl>     <dbl>       <dbl> <dbl>
#  1 Chee~ Acin~ carni Carn~ lc                  12.1      -1        -1      11.9
#  2 Owl ~ Aotus omni  Prim~ -1                  17         1.8      -1       7  
#  3 Moun~ Aplo~ herbi Rode~ nt                  14.4       2.4      -1       9.6
#  4 Grea~ Blar~ omni  Sori~ lc                  14.9       2.3       0.133   9.1
#  5 Cow   Bos   herbi Arti~ domesticated         4         0.7       0.667  20  
#  6 Thre~ Brad~ herbi Pilo~ -1                  14.4       2.2       0.767   9.6
#  7 Nort~ Call~ carni Carn~ vu                   8.7       1.4       0.383  15.3
#  8 Vesp~ Calo~ -1    Rode~ -1                   7        -1        -1      17  
#  9 Dog   Canis carni Carn~ domesticated        10.1       2.9       0.333  13.9
# 10 Roe ~ Capr~ herbi Arti~ lc                   3        -1        -1      21  
# # ... with 73 more rows, and 2 more variables: brainwt <dbl>, bodywt <dbl>