0

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

rel      <- c(2, 5, NA, 3, 6)
year.in  <- c(4, NA, 2, 3, 2)
year.out <- c(6, 7, NA, 5, 4)
year.1   <- c(NA, NA, NA, NA, NA)
year.2   <- c(NA, NA, NA, NA, NA)
year.3   <- c(NA, NA, NA, NA, NA)
year.4   <- c(NA, NA, NA, NA, NA)
year.5   <- c(NA, NA, NA, NA, NA) 

df <- as.data.frame(cbind(rel, year.in, year.out, year.1, year.2, year.3, 
                      year.4, year.5))

私がやりたいのは、「rel」の値で year.1 - year.5 の欠損値を更新することですが、次の場合に限ります: (year.in >= year.i AND year.out <= year.i) (i は 1:5 です)

ちょうど入学年に焦点を当てて、私はこれを思いついた:

for (i in 1:5) ifelse(df$year.in < i,
    df[paste("year", i, sep= ".")]<- NA,
    df[paste("year", i, sep= ".")]<- df["rel"])

しかし、これはすべての year.i 変数を rel の値に置き換えるだけです。

2 つの質問があります。

  • 上記の条件で「rel」値を使用して year.i 変数を更新するにはどうすればよいですか?

  • ここで if else ステートメントを使用するのは悪いことですか?

よろしくお願いします。

リチャード

4

2 に答える 2

4
library(data.table)
dt = data.table(df)

for(i in 1:5) dt[year.in <= i & i <= year.out, paste0('year.', i) := rel]

dt
#   rel year.in year.out year.1 year.2 year.3 year.4 year.5
#1:   2       4        6     NA     NA     NA      2      2
#2:   5      NA        7     NA     NA     NA     NA     NA
#3:  NA       2       NA     NA     NA     NA     NA     NA
#4:   3       3        5     NA     NA      3      3      3
#5:   6       2        4     NA      6      6      6     NA
于 2013-07-15T21:00:38.133 に答える