我有一个带值的矩阵和时间戳作为字符串。
> 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"
谢谢!
答案 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)。