R を使用して、次のような大きなデータ フレームがあります。
df = data.frame(X1 = c("02JAN2008","09:30 - 10:00", "10:00 - 10:30", "10:30 - 11:00","11:00 - 11:30", "15:30 - 16:00", "16:00 - 16:30", "03JAN2008", "09:30 - 10:00", "10:00 - 10:30", "10:30 - 11:00", "11:00 - 11:30"),X2 = c(NA, 1469.37, 1459.91, 1456.92, 1453.48, 1447.22, 1447.16,NA, 1449.78, 1451.21, 1450.08, 1452.16),X3 = c(NA, 1467.97, 1467.11, 1459.76, 1457.00, 1444.00, 1447.67,NA, 1447.55, 1450.66, 1452.06, 1450.01))
次のようになります。
X1 X2 X3
1 02JAN2008 NA NA
2 09:30 - 10:00 1469.37 1467.97
3 10:00 - 10:30 1459.91 1467.11
4 10:30 - 11:00 1456.92 1459.76
5 11:00 - 11:30 1453.48 1457.00
6 15:30 - 16:00 1447.22 1444.00
7 16:00 - 16:30 1447.16 1447.67
8 03JAN2008 NA NA
9 09:30 - 10:00 1449.78 1447.55
10 10:00 - 10:30 1451.21 1450.66
11 10:30 - 11:00 1450.08 1452.06
12 11:00 - 11:30 1452.16 1450.01
データが欠落しているため、ある日は 6 回の観測があるかもしれませんが、他の日は 4 回しかないかもしれません (またはそれ以下、これは例です)。
これを、次のように、30 分間隔ごとに別の列として日付を含むデータ フレームに変換したいと思います。
X1 X2 X3 X4
1 02JAN2008 09:30 - 10:00 1469.37 1467.97
2 02JAN2008 10:00 - 10:30 1459.91 1467.11
3 02JAN2008 10:30 - 11:00 1456.92 1459.76
4 02JAN2008 11:00 - 11:30 1453.48 1457.00
5 02JAN2008 15:30 - 16:00 1447.22 1444.00
6 02JAN2008 16:00 - 16:30 1447.16 1447.67
7 03JAN2008 09:30 - 10:00 1449.78 1447.55
8 03JAN2008 10:00 - 10:30 1451.21 1450.66
9 03JAN2008 10:30 - 11:00 1450.08 1452.06
10 03JAN2008 11:00 - 11:30 1452.16 1450.01
df
X2 がどこにあるかのインデックスを簡単に取得して、日付を繰り越すループをNA
作成できますが、Rfor
でのループは避けたいと思います。for
Rでこれを行うにはどうすればよいですか?確かにdplyr
またはtidyr
解決策が利用可能ですが、ドキュメントの例からは作成できません。または、おそらくいくつかのバージョンのmelt
?