web-dev-qa-db-ja.com

NAを値のセットで置き換える方法

次のデータフレームがあります。

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

どうすればそれを達成できますか?

17
scamander

ベースの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
2
Sergiy