Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何处理间隔不规则的时间序列?_R - Fatal编程技术网

R 如何处理间隔不规则的时间序列?

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,

我有一个包含各种传感器读数的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,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日期。最简单的方法是在导入期间将此列强制为class
character

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")