我有两个列表 - test.segments
- 表示时间戳,第二个表示test.coords
- 表示纬度/经度坐标。每个列表中的元素数量相等 - 因此理论上两者应该很容易组合。
> test.segments
[[1]]
[1] 4380.000 4388.125 4396.250 4404.375 4412.500 4420.625 4428.750 4436.875 4445.000
[[2]]
[1] 4448.000 4449.667 4451.333 4453.000
[[3]]
[1] 4696.000 4716.444 4736.889 4757.333 4777.778 4798.222 4818.667 4839.111 4859.556 4880.000
> test.coords
[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
[,1] [,2]
[1,] 19.93882 50.06548
[2,] 19.93882 50.06548
[3,] 19.93881 50.06556
[4,] 19.93885 50.06561
[5,] 19.93885 50.06562
[6,] 19.93885 50.06561
[7,] 19.93885 50.06561
[8,] 19.93885 50.06561
[9,] 19.93885 50.06561
[[2]]
[[2]][[1]]
[[2]][[1]][[1]]
[,1] [,2]
[1,] 19.91947 50.07203
[2,] 19.91947 50.07203
[3,] 19.91947 50.07203
[4,] 19.91947 50.07203
[[3]]
[[3]][[1]]
[[3]][[1]][[1]]
[,1] [,2]
[1,] 19.93553 50.06572
[2,] 19.93554 50.06568
[3,] 19.93554 50.06568
[4,] 19.93551 50.06574
[5,] 19.93537 50.06576
[6,] 19.93403 50.06723
[7,] 19.93394 50.06734
[8,] 19.93393 50.06738
[9,] 19.93393 50.06738
[10,] 19.93393 50.06738
我的目标是将下面的合并两个列表合并为一个json格式(注意:键vendor
应始终为0),以便startTime
表示第一个段,endTime
表示最后一段,segments
是[lat, lon, corresponding segment]
我尝试使用jsonlite
库,但这会在4个小数点后切断坐标,我不知道如何组合这两个列表。任何建议将不胜感激。
[
{
"vendor": 0,
"startTime": 4380,
"endTime": 4445,
"segments": [
[19.93882, 50.06548, 4380],
[19.93882, 50.06548, 4388.125],
[19.93881, 50.06556, 4396.250],
[19.93885, 50.06561, 4404.375],
[19.93885, 50.06562, 4412.500],
[19.93885, 50.06561, 4420.625],
[19.93885, 50.06561, 4428.750],
[19.93885, 50.06561, 4436.875],
[19.93885, 50.06561, 4445]
]
},
{
"vendor": 0,
"startTime": 4448,
"endTime": 4453,
"segments": [
[19.91947, 50.07203, 4448],
[19.91947, 50.07203, 4449.667],
[19.91947, 50.07203, 4451.333],
[19.91947, 50.07203, 4453]
]
},
{
"vendor": 0,
"startTime": 4696,
"endTime": 4880,
"segments": [
[19.93553, 50.06572, 4696],
[19.93554, 50.06568, 4716.444],
[19.93554, 50.06568, 4736.889],
[19.93551, 50.06574, 4757.333],
[19.93537, 50.06576, 4777.778],
[19.93403, 50.06723, 4798.222],
[19.93394, 50.06734, 4818.667],
[19.93393, 50.06738, 4839.111],
[19.93393, 50.06738, 4859.556],
[19.93393, 50.06738, 4880]
]
}
]
以下是上面使用的数据样本:
> dput(test.segments)
list(c(4380, 4388.125, 4396.25, 4404.375, 4412.5, 4420.625, 4428.75,
4436.875, 4445), c(4448, 4449.66666666667, 4451.33333333333,
4453), c(4696, 4716.44444444444, 4736.88888888889, 4757.33333333333,
4777.77777777778, 4798.22222222222, 4818.66666666667, 4839.11111111111,
4859.55555555556, 4880))
> dput(test.coords)
list(list(list(structure(c(19.9388183333333, 19.9388183333333,
19.93881, 19.938845, 19.9388483333333, 19.9388516666667, 19.9388516666667,
19.9388516666667, 19.9388516666667, 50.0654816666667, 50.0654816666667,
50.0655566666667, 50.0656116666667, 50.065615, 50.0656083333333,
50.0656066666667, 50.0656066666667, 50.0656066666667), .Dim = c(9L,
2L)))), list(list(structure(c(19.9194666666667, 19.9194666666667,
19.9194666666667, 19.9194666666667, 50.0720283333333, 50.0720283333333,
50.0720283333333, 50.0720283333333), .Dim = c(4L, 2L)))), list(
list(structure(c(19.9355333333333, 19.93554, 19.93554, 19.9355116666667,
19.9353733333333, 19.9340316666667, 19.9339433333333, 19.9339266666667,
19.9339266666667, 19.9339266666667, 50.06572, 50.06568, 50.06568,
50.0657416666667, 50.065765, 50.06723, 50.0673366666667,
50.0673833333333, 50.0673816666667, 50.0673816666667), .Dim = c(10L,
2L)))))
答案 0 :(得分:0)
我们可以使用purrr
的{{1}}函数来'迭代'并行两个列表,然后根据需要组合它们,然后转换为json:
map2()
答案 1 :(得分:0)
你也可以在基地R做到这一点,虽然@ GGamba的答案可能更快。
library(jsonlite)
test.segments = list(c(4380, 4388.125, 4396.25, 4404.375, 4412.5, 4420.625, 4428.75,
4436.875, 4445),
c(4448, 4449.66666666667, 4451.33333333333, 4453),
c(4696, 4716.44444444444, 4736.88888888889, 4757.33333333333,
4777.77777777778, 4798.22222222222, 4818.66666666667, 4839.11111111111,
4859.55555555556, 4880))
test.coords = list(
list(
list(
structure(c(19.9388183333333, 19.9388183333333,
19.93881, 19.938845, 19.9388483333333, 19.9388516666667, 19.9388516666667,
19.9388516666667, 19.9388516666667, 50.0654816666667, 50.0654816666667,
50.0655566666667, 50.0656116666667, 50.065615, 50.0656083333333,
50.0656066666667, 50.0656066666667, 50.0656066666667), .Dim = c(9L, 2L)))),
list(
list(
structure(c(19.9194666666667, 19.9194666666667, 19.9194666666667, 19.9194666666667,
50.0720283333333, 50.0720283333333, 50.0720283333333, 50.0720283333333),
.Dim = c(4L, 2L)))),
list(
list(
structure(c(19.9355333333333, 19.93554, 19.93554, 19.9355116666667, 19.9353733333333,
19.9340316666667, 19.9339433333333, 19.9339266666667, 19.9339266666667,
19.9339266666667, 50.06572, 50.06568, 50.06568, 50.0657416666667,
50.065765, 50.06723, 50.0673366666667,
50.0673833333333, 50.0673816666667, 50.0673816666667), .Dim = c(10L, 2L)))))
tmp = lapply(seq_along(test.segments), function(i) {
x = test.segments[[i]]
y = test.coords[[i]][[1]][[1]]
y = unname(cbind(y, x))
list(vendor=0, startTime=min(x), endTime=max(x), segments=y)
})
j = toJSON(tmp, auto_unbox=TRUE)