将文本转换为R中矩阵的日期/时间戳,用于plot.ts

时间:2014-10-26 20:55:06

标签: r

我有一个带值的矩阵和时间戳作为字符串。

> m
        value time
   [1,] 0     "2014-10-20T01:48:00.019+02:00"
   [2,] 0     "2014-10-20T01:48:30.019+02:00"
   [3,] 0     "2014-10-20T01:49:00.019+02:00"
   [4,] 0     "2014-10-20T01:49:30.020+02:00"
   [5,] 0     "2014-10-20T01:50:00.020+02:00"
...

我想将字符串转换为时间戳左右,将它们绘制在时间序列图表上(我建议使用plot.ts!?)。我知道我可以使用

strptime(data, "%Y-%m-%dT%H:%M:%OS")

转换字符串,但我不知道如何应用于矩阵。

背景

我从JSON文件加载数据:

{
measurements:
  0:  {
    id: "87144000"
    self: "http://xxxyyyzzz.com/measurement/measurements/87144000"
    source: {...}
    time: "2014-10-20T01:48:00.019+02:00"
    type: "LightSensor"
    LightSensor: {
        light: {
          unit: "LUX"
          value: 0
        }
    }
  }
  ...
}

我加载并转换:

> l <- fromJSON(file = "./dev/learning-r/data/c8y-measurement-light.json")
> m <- lapply (l$measurements, function(x) c(x$LightSensor$light['value'], x['time']))
> m <- do.call(rbind, m)

> str(m)
List of 2000
 $ : num 0

 ...

 $ : num 0
  [list output truncated]
 - attr(*, "dim")= int [1:2] 1000 2
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:2] "value" "time"

谢谢!

2 个答案:

答案 0 :(得分:0)

我发现,结构m是一个列表。我将列表转换为data.frame

dat <- data.frame(m)

现在我可以申请@agtudy略微更改的命令

dat$time <- as.POSIXct(strptime(dat$time, "%Y-%m-%dT%H:%M:%OS"))

结果

> dat
     value                time
1        0 2014-10-20 01:48:00

答案 1 :(得分:0)

您可以使用:

 strptime(x['time'], "%Y-%m-%dT%H:%M:%OS");

直接在你的lapply函数中。这暂时忽略了时区,但应该有效。如果您对时区感兴趣,请查看%z参数(可能需要一些正则表达式)。

然后将矩阵转换为数据帧:

df <- data.frame(m)

现在你应该能够直接绘制数据(请用summary(df)检查并非所有值都为零)和plot(df)。