web-dev-qa-db-fra.com

Remplacez NA par Zero dans dplyr sans utiliser list ()

Dans dplyr, je peux remplacer NA par 0 en utilisant le code suivant. Le problème est que cela insère une liste dans ma trame de données qui fausse une analyse plus approfondie le long de la ligne. Je ne comprends même pas les listes ou les vecteurs atomiques ou quoi que ce soit à ce stade. Je veux juste choisir certaines colonnes et remplacer toutes les occurrences de NA par zéro. Et conservez le statut entier des colonnes.

library(dplyr)
df <- tibble(x = c(1, 2, NA), y = c("a", NA, "b"), z = list(1:5, NULL, 10:20))
df
df %>% replace_na(list(x = 0, y = "unknown"))

Cela fonctionne mais transforme la colonne en liste. Comment faire sans transformer la colonne en liste?

Et voici comment le faire dans la base R. Mais vous ne savez pas comment le transformer en une déclaration mutate:

df$x[is.na(df$x)] <- 0
8
stackinator

Quelle version de dplyr utilisez-vous? Ce pourrait être un ancien. La fonction replace_na Semble maintenant être dans tidyr. Cela marche

library(tidyr)
df <- tibble::tibble(x = c(1, 2, NA), y = c("a", NA, "b"), z = list(1:5, NULL, 10:20))
df %>% replace_na(list(x = 0, y = "unknown")) %>% str()
# Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 3 obs. of  3 variables:
#  $ x: num  1 2 0
#  $ y: chr  "a" "unknown" "b"
#  $ z:List of 3
#   ..$ : int  1 2 3 4 5
#   ..$ : NULL
#   ..$ : int  10 11 12 13 14 15 16 17 18 19 ...

Nous pouvons voir que les valeurs NA ont été remplacées et les colonnes x et y sont toujours des vecteurs atomiques. Testé avec tidyr_0.7.2.

11
MrFlick
dt  <- mutate(dt, x = ifelse(is.na(x), 0, x))
24
NT_

Pour remplacer toutes les AN dans une trame de données, utilisez

df %>% replace(is.na(.), 0)

0
Oliver Oliver