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?
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