現実逃避的に,
R data.frame わざ質問をもらったので回答を試みる.
dataframa1をdataframe2にようにしたいですが、
dataframe1
ID time1 time2 time3
1 11 10 30 NA
2 12 NA 20 25
3 13 5 NA 19
4 14 7 NA NA
5 15 NA NA NA
6 16 NA 25 NA
dataframe2
ID time1 time2 time3 time4
1 11 10 30 NA 30
2 12 NA 20 25 25
3 13 5 NA 19 19
4 14 7 NA NA 7
5 15 NA NA NA NA
6 16 NA 25 NA 25
上記のようにtime1とtime2とtime3のdataをあわせてtime4を新たに作成し、
また値が同じID内で2つ以上含まれる場合は大きいほうを適応させるには
どのようにすればよいのか御教授いただけないでしょうか?
値自体は同じID内であれば常にtime3 > time2 >time1になっています。
ID15のようにdataがいずれも欠損していることもあります。
という問題なので,
たとえば,
こうすればよいのではなかろーか?
> (d <- read.csv("data16.csv"))
ID time1 time2 time3
1 11 10 30 NA
2 12 NA 20 25
3 13 5 NA 19
4 14 7 NA NA
5 15 NA NA NA
6 16 NA 25 NA
> # こういう apply() わざでよさそう
> apply(d[,2:ncol(d)], 1, function(X) rev(X[!is.na(X)])[1])
1 2 3 4 5 6
30 25 19 7 NA 25
> # data.frame "d" に追加したいならこういうかんじで
> d$time4 <- apply(d[,2:ncol(d)], 1, function(X) rev(X[!is.na(X)])[1])
行 (row) ごとに一番おおきな値ということなので,
max()
を使えばよさそうな気もするが,
5 行目のごとく「全部 NA」というのもあるので,
これは max()
では対処できない
(if()
とかで場合わけもできるけど).