次のデータフレームがあります。
library(dplyr)
library(tibble)
df <- tibble(
source = c("a", "b", "c", "d", "e"),
score = c(10, 5, NA, 3, NA ) )
df
次のようになります。
# 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
私がしたいことは、スコア列のNA
を既存のmax + n
以降の範囲の値に置き換えることです。ここで、n
の範囲は1からdf
の行の総数です。
この結果(手作業でコーディング):
source score
a 10
b 5
c 11 # obtained from 10 + 1
d 3
e 12 # obtained from 10 + 2
どうすればそれを達成できますか?
ベースのRソリューションと比較してかなりエレガントではありませんが、それでも可能です:
library(data.table)
setDT(df)
max.score = df[, max(score, na.rm = TRUE)]
df[is.na(score), score :=(1:.N) + max.score]
または1行で少し遅い:
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