Заменить все NA с -1 в r на dplyr - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время я работаю с тидиверсом в R. После использования мышей для вменения NA некоторые столбцы все еще имеют NA из-за того, что они изначально малонаселены (я полагаю).В качестве окончательной проверки я хочу заменить все оставшиеся NA на -1.Обычно это происходит в одном столбце в зависимости от набора данных.Короче говоря, я делаю один и тот же процесс в нескольких местах, и иногда Col1 замечательно заполняется в регионе A, но плохо в регионе B.

В настоящее время я делаю следующее.

    Clean.df <- df %>% mutate(
              coalesce(Col1 ,-1),
              coalesce(Col2, -1),
              ....)

И я делаю это для 31 колонки, что заставляет меня думать, что должен быть более легкий путь.Я попытался прочитать объединенную документацию и попытался заменить ее именем фрейма данных, но не повезло.

Спасибо за понимание.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Альтернатива ответу Индраджита, который является чистым dplyr.Используя рекомендации Индраджита 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>

Если вы хотите использовать ядерную опцию для всех столбцов (numeric и character), тогда используйте:

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>

Обратите внимание, чтоЯ больше не использую dplyr::if_else, так как функция должна быть универсальной (или не знать) о различных типах.Поскольку base::ifelse будет счастливо / тихо (/ небрежно?) Конвертировать, мы хороши.

0 голосов
/ 11 октября 2018

Поскольку вы не предоставили никаких данных, я использую примерный фрейм данных, чтобы показать, как каждый NA в фрейме данных может быть заменен заданным значением (-1):

library(tidyverse)

# creating example dataset
example_df <- ggplot2::msleep

# looking at NAs
example_df
#> # A tibble: 83 x 11
#>    name  genus vore  order conservation sleep_total sleep_rem sleep_cycle
#>    <chr> <chr> <chr> <chr> <chr>              <dbl>     <dbl>       <dbl>
#>  1 Chee~ Acin~ carni Carn~ lc                  12.1      NA        NA    
#>  2 Owl ~ Aotus omni  Prim~ <NA>                17         1.8      NA    
#>  3 Moun~ Aplo~ herbi Rode~ nt                  14.4       2.4      NA    
#>  4 Grea~ Blar~ omni  Sori~ lc                  14.9       2.3       0.133
#>  5 Cow   Bos   herbi Arti~ domesticated         4         0.7       0.667
#>  6 Thre~ Brad~ herbi Pilo~ <NA>                14.4       2.2       0.767
#>  7 Nort~ Call~ carni Carn~ vu                   8.7       1.4       0.383
#>  8 Vesp~ Calo~ <NA>  Rode~ <NA>                 7        NA        NA    
#>  9 Dog   Canis carni Carn~ domesticated        10.1       2.9       0.333
#> 10 Roe ~ Capr~ herbi Arti~ lc                   3        NA        NA    
#> # ... with 73 more rows, and 3 more variables: awake <dbl>, brainwt <dbl>,
#> #   bodywt <dbl>

# replacing NAs with -1
purrr::map_dfr(.x = example_df,
           .f = ~ tidyr::replace_na(data = ., -1))
#> # A tibble: 83 x 11
#>    name  genus vore  order conservation sleep_total sleep_rem sleep_cycle
#>    <chr> <chr> <chr> <chr> <chr>              <dbl>     <dbl>       <dbl>
#>  1 Chee~ Acin~ carni Carn~ lc                  12.1      -1        -1    
#>  2 Owl ~ Aotus omni  Prim~ -1                  17         1.8      -1    
#>  3 Moun~ Aplo~ herbi Rode~ nt                  14.4       2.4      -1    
#>  4 Grea~ Blar~ omni  Sori~ lc                  14.9       2.3       0.133
#>  5 Cow   Bos   herbi Arti~ domesticated         4         0.7       0.667
#>  6 Thre~ Brad~ herbi Pilo~ -1                  14.4       2.2       0.767
#>  7 Nort~ Call~ carni Carn~ vu                   8.7       1.4       0.383
#>  8 Vesp~ Calo~ -1    Rode~ -1                   7        -1        -1    
#>  9 Dog   Canis carni Carn~ domesticated        10.1       2.9       0.333
#> 10 Roe ~ Capr~ herbi Arti~ lc                   3        -1        -1    
#> # ... with 73 more rows, and 3 more variables: awake <dbl>, brainwt <dbl>,
#> #   bodywt <dbl>

Создано в 2018-10-10 пакетом Представление (v0.2.1)

...