使用 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
然后编写一个for
将日期向前推进的循环,但我想避免for
R 中的循环。
我怎样才能在 R 中做到这一点?当然可以使用dplyr
ortidyr
解决方案,但我无法从文档中的示例中生成一个。或者也许某个版本的melt
?