web-dev-qa-db-fra.com

Comment remplacer NA par un ensemble de valeurs

J'ai la trame de données suivante:

library(dplyr)
library(tibble)


df <- tibble(
  source = c("a", "b", "c", "d", "e"),
  score = c(10, 5, NA, 3, NA ) ) 


df

Cela ressemble à ceci:

# A tibble: 5 x 2
  source score
  <chr>  <dbl>
1 a         10 . # current max value
2 b          5
3 c         NA
4 d          3
5 e         NA

Ce que je veux faire est de remplacer NA dans la colonne de score par des valeurs allant de max + n À partir de. Où n va de 1 au nombre total de lignes de df

Résultat: (codé à la main):

  source score
  a         10
  b          5
  c         11 # obtained from 10 + 1
  d          3
  e         12 #  obtained from 10 + 2

Comment puis-je y parvenir?

17
scamander

Pas tout à fait élégant par rapport aux solutions de base R, mais toujours possible:

library(data.table)
setDT(df)

max.score = df[, max(score, na.rm = TRUE)]
df[is.na(score), score :=(1:.N) + max.score]

Ou sur une ligne mais un peu plus lentement:

df[is.na(score), score := (1:.N) + df[, max(score, na.rm = TRUE)]]
df
   source score
1:      a    10
2:      b     5
3:      c    11
4:      d     3
5:      e    12
2
Sergiy