【发布时间】:2014-06-05 02:35:40
【问题描述】:
这几乎是一个挑战!
我有以下数据框:
tag hour val
N1 2013-01-01 00:00:00 0.3404266179
N1 2013-01-01 01:00:00 0.3274182995
N1 2013-01-01 02:00:00 0.3142598749
N2 2013-01-01 02:00:00 0.3189924887
N2 2013-01-01 04:00:00 0.3170907762
N3 2013-01-01 05:00:00 0.3161910788
N3 2013-01-01 06:00:00 0.4247638954
我需要把它改成这样:
hour N1 N2 N3
2013-01-01 00:00:00 0.3404266179 NULL NULL
2013-01-01 01:00:00 0.3274182995 NULL NULL
2013-01-01 02:00:00 0.3142598749 0.3189924887 NULL
2013-01-01 03:00:00 NULL NULL NULL
2013-01-01 04:00:00 NULL 0.3170907762 NULL
2013-01-01 05:00:00 NULL NULL 0.3161910788
2013-01-01 06:00:00 NULL NULL 0.4247638954
由于事情并不那么容易,我的数据帧上升到 N5000,每小时每个 N 有近 200.000 个条目。
时间戳表现得非常好,因为它对每个人都一分钟一分钟地增加,您可以使用strptime("2013-01-01 00:00:00", "%Y-%m-%d %H:%M:%S") + c(0:172800)*60(172800 分钟 ~ 4 个月)这样的简单命令生成所有时间戳。但不一定每个时间戳都有数据,如我在示例中所示。
我知道我可以编写一个无限循环的函数,但是有没有办法只使用 R(及其包)函数来做到这一点?
谢谢!
【问题讨论】:
-
如果“val”中没有“0”,您可以看到类似
xtabs(val ~ as.character(hour) + tag, DF)的内容并将“0”替换为NA? -
虽然我的数据框中确实有 0,但 xtabs 可以轻松做到这一点,但是太慢了!演员几乎是瞬间的!
标签: r