【发布时间】:2017-04-21 17:29:24
【问题描述】:
我知道这个问题并不新鲜,但我的案例包含一些以前的回复无法完全解决的特征。
我在 R 中有一个非常大的数据框,名为“df”(包括 1400 万个元素),格式如下:
ID datetime measurem
1: 1459 2013-01-08 00:00:00 2.24
2: 1459 2013-01-08 01:00:00 2
3: 1459 2013-01-08 02:00:00 2.54
4: 1459 2013-01-08 03:00:00 3.98
5: 1459 2013-01-08 04:00:00 2
6: 1459 2013-01-08 05:00:00 2
7: 1459 2013-01-08 06:00:00 3
....
1007: 2434 2013-01-08 00:00:00 3.45
1008: 2434 2013-01-08 01:00:00 3
1009: 2434 2013-01-08 02:00:00 4
1010: 2434 2013-01-08 03:00:00 5.01
1011: 2434 2013-01-08 04:00:00 4
....
3245: 4780 2013-01-10 00:00:00 3
3246: 4780 2013-01-10 01:00:00 4.73
3247: 4780 2013-01-10 02:00:00 3
df的结构如下:
类“data.table”和“data.frame”:14103024 obs。 3个变量:
$ ID: chr "1459" "1459" ...
$ datetime : POSIXct, format: "2013-01-08 00:00:00" "2013-01-08 01:00:00" ...
$ measurem: num 2.24 2 2.54 ...
我想先将能量数据“measurem”转换为每天取总和,然后转换为每天两次(一次测量到上午 12 点,另一次测量到下午 12 点),同时保留 ID 列和日期。由于完整的数据框太大,我将不胜感激任何可以工作相对较快的建议。
提前谢谢你!
【问题讨论】:
-
所以你要在
ID和datetime上尝试aggregate?你有每天和每个 ID 的每小时数据吗? -
@jwells 是的,我想为每个 ID 进行转换。我有很多年的每小时数据,但并不是所有的 ID 都有那个时期的数据。
-
好的,所以我 100% 肯定
apply有更好的方法,但我仍然不是很好,如果没有真正看到数据,很难确定,但我会尝试:newmeas <- aggregate(measurem ~ ID, data = df, sum)这可能是一个快速而肮脏的解决方案,用于按 ID 衡量的总和 -
谢谢。这给出了每个 ID 具有数据的整个期间的总和。我怎样才能将其转换为每日总和?
-
(我认为)
~ID + datetime