R 如何处理间隔不规则的时间序列?
我有一个包含各种传感器读数的CSV文件 它看起来好像代表了四个不同的时间序列:温度、运动、功率和电池,每个读数在稍微不同的时间获取R 如何处理间隔不规则的时间序列?,r,R,我有一个包含各种传感器读数的CSV文件 它看起来好像代表了四个不同的时间序列:温度、运动、功率和电池,每个读数在稍微不同的时间获取 dat <- read.csv(text = "id,device_id,type,value,timestamp 1432,4,temperature,21,2015-06-01T00:00:00Z 1433,4,motion,0,2015-06-01T00:00:15Z 1434,4,power,0,2015-06-01T00:00:30Z 1435,4,
dat <- read.csv(text = "id,device_id,type,value,timestamp
1432,4,temperature,21,2015-06-01T00:00:00Z
1433,4,motion,0,2015-06-01T00:00:15Z
1434,4,power,0,2015-06-01T00:00:30Z
1435,4,battery,4.16,2015-06-01T00:00:46Z
1448,4,temperature,21,2015-06-01T00:17:00Z
1449,4,motion,0,2015-06-01T00:17:15Z
1450,4,power,0,2015-06-01T00:17:30Z
1451,4,battery,4.16,2015-06-01T00:17:45Z
1464,4,temperature,21,2015-06-01T00:33:57Z")
str(dat)
'data.frame': 9 obs. of 5 variables:
$ id : int 1432 1433 1434 1435 1448 1449 1450 1451 1464
$ device_id: int 4 4 4 4 4 4 4 4 4
$ type : Factor w/ 4 levels "battery","motion",..: 4 2 3 1 4 2 3 1 4
$ value : num 21 0 0 4.16 21 0 0 4.16 21
$ timestamp: Factor w/ 9 levels "2015-06-01T00:00:00Z",..: 1 2 3 4 5 6 7 8 9
dat只需几行代码,就可以在R中轻松完成这项工作
第一步是将时间戳转换为POSIXct日期。最简单的方法是在导入期间将此列强制为classcharacter
:
dat <- read.csv(colClasses = c(timestamp = "character"),
text = "id,device_id,type,value,timestamp
1432,4,temperature,21,2015-06-01T00:00:00Z
1433,4,motion,0,2015-06-01T00:00:15Z
1434,4,power,0,2015-06-01T00:00:30Z
1435,4,battery,4.16,2015-06-01T00:00:46Z
1448,4,temperature,21,2015-06-01T00:17:00Z
1449,4,motion,0,2015-06-01T00:17:15Z
1450,4,power,0,2015-06-01T00:17:30Z
1451,4,battery,4.16,2015-06-01T00:17:45Z
1464,4,temperature,21,2015-06-01T00:33:57Z")
然后使用ggplot2
进行绘图。例如:
library(ggplot2)
ggplot(dat, aes(x=timestamp, y = value, group = device_id)) +
geom_point() +
geom_line() +
facet_grid(type ~ ., scales = "free_y")
R导入csv、R绘图、R解析日期时间。。。有一些很好的起点。data@JohnLawrenceAspden这完全是垃圾。如果这需要几行以上的R来读取,以正确的格式获取timestatmp,并使用ggplot绘制所有系列,我会感到惊讶。@JohnLawrenceAspden再次强调,不,在稍微不同的时间点上有数据不是问题。如果那些急于结束这一切的人没有,我现在就告诉你怎么做。这只是有点太长了,无法连贯地发布到评论中。这与我想展示的内容差不多,不过我会模拟更多数据,让情节看起来很别致:P@Spacedman如编辑中所示,您可以通过将公式翻转到type~。
并通过scales=“free_y”指定单独的y轴比例来解决此问题
我没有意识到数据在任何尺度上都是平坦的…:)我相信ggplot2中有一个新功能,可以将面板条放置在左侧,实际上它们可以用更有意义的内容替换轴标题
library(ggplot2)
ggplot(dat, aes(x=timestamp, y = value, group = device_id)) +
geom_point() +
geom_line() +
facet_grid(type ~ ., scales = "free_y")