【发布时间】:2017-05-24 10:22:29
【问题描述】:
我正在尝试找到一种方法来执行与下面的熊猫操作等效的重新采样操作:
示例原始数据框df:
FT
Time
2017-03-18 23:30:00 73.9
2017-03-18 23:31:00 73.5
2017-03-18 23:32:00 71.6
2017-03-18 23:33:00 71.3
2017-03-18 23:34:00 72.3
2017-03-18 23:35:00 72.1
2017-03-18 23:36:00 70.1
2017-03-18 23:37:00 67.9
2017-03-18 23:38:00 65.4
2017-03-18 23:39:00 63.4
2017-03-18 23:40:00 61.3
2017-03-18 23:41:00 59.9
2017-03-18 23:42:00 58.4
2017-03-18 23:43:00 58.4
2017-03-18 23:44:00 55.6
2017-03-18 23:45:00 54.3
2017-03-18 23:46:00 54.3
2017-03-18 23:47:00 53.0
2017-03-18 23:48:00 51.9
2017-03-18 23:49:00 50.8
2017-03-18 23:50:00 49.8
2017-03-18 23:51:00 48.9
2017-03-18 23:52:00 47.6
2017-03-18 23:53:00 44.5
2017-03-18 23:54:00 57.2
2017-03-18 23:55:00 61.6
2017-03-18 23:56:00 59.8
2017-03-18 23:57:00 58.0
2017-03-18 23:58:00 56.2
2017-03-18 23:59:00 56.2
重采样:
date_format= '%d-%b-%Y %H:%M:%S'
df.index=pd.to_datetime(df.index,format=date_format)
df=df.resample('5Min').mean()
输出:
FT
Time
2017-03-18 23:30:00 72.52
2017-03-18 23:35:00 67.78
2017-03-18 23:40:00 58.72
2017-03-18 23:45:00 52.86
2017-03-18 23:50:00 49.60
2017-03-18 23:55:00 58.36
我想知道使用给定聚合函数(例如均值、总和等)和给定采样时间重新采样数据帧的最简单方法。在 Pandas 中,我知道不使用插值,并且 resample 函数执行“分组”操作。
我猜可以通过这种方式转换为日期时间:
df$Time=strptime(df$Time,"%d-%b-%Y %H:%M:%S")
但我不确定应该将哪个 R 库用于重采样操作本身。
谢谢
编辑:
使用我获得的 readr read_csv
# A tibble: 43,981 × 6
Time Power Tin FT RT Flow
* <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 16-Feb-2017 11:00:00 0.09 18.87 57.9 53.3 17
2 16-Feb-2017 11:01:00 0.09 18.87 57.9 53.3 17
3 16-Feb-2017 11:02:00 0.09 18.87 57.9 53.3 17
4 16-Feb-2017 11:03:00 0.09 18.87 57.9 53.3 17
5 16-Feb-2017 11:04:00 0.09 18.87 57.9 53.3 17
6 16-Feb-2017 11:05:00 0.09 18.87 57.9 53.3 17
7 16-Feb-2017 11:06:00 0.09 18.87 57.9 53.3 17
8 16-Feb-2017 11:07:00 0.09 18.87 57.9 53.3 17
9 16-Feb-2017 11:08:00 0.09 18.87 57.9 53.3 17
10 16-Feb-2017 11:09:00 0.09 18.87 57.9 53.3 17
# ... with 43,971 more rows
但是
df %>% thicken("5 min") %>% group_by(Time_5_min) %>% summarise(mean(FT))
给出以下错误:
"Error: x does not contain a variable of class Date, POSIXct, or POSIXlt.
Traceback:"
更新:
@Edwin 给出的解决方案效果很好
我使用以下转换为日期时间。
df$Time=as.POSIXct(df$Time, format="%d-%b-%Y %H:%M:%S")
【问题讨论】:
-
您能否澄清
df %>% thicken("5 min") %>% group_by(Time_5_min) %>% summarise(mean(FT))行中的 Time_5_min 是什么? @user7188934 -
我想通了 - 运行
df %>% thicken("5 min")时,thicken函数会自动将time_5_min列添加到数据帧中
标签: r datetime time-series