我有json文件,看起来像这样
[
{
"frameId": 0E+1,
"par": "02",
"data": [
{
"dur": 158.0,
"reg": "one",
"sreg": null
},
{
"dur": 217.0,
"reg": "one",
"sreg": null
}
]
},
{
"frameId": 0E+1,
"par": "03",
"data": [
{
"dur": 193.0,
"reg": "one",
"sreg": null
},
{
"dur": 160.0,
"reg": "two",
"sreg": null
}
]
}
]
当我在R中读到它时,我有以下数据框
str(d)
'data.frame': 8 obs. of 3 variables:
$ frameId: num 0 0 0.1 0.1 0.2 0.2 0.3 0.3
$ par : chr "02" "03" "02" "03" ...
$ data :List of 8
..$ :'data.frame': 103 obs. of 3 variables:
.. ..$ dur : num 158 217 492 75 142 117 100 200 383 192 ...
.. ..$ reg : chr "one" "one" "one" "one" ...
.. ..$ sreg: chr NA NA NA NA ...
..$ :'data.frame': 114 obs. of 3 variables:
.. ..$ dur : num 193 160 183 223 160 100 97 153 143 420 ...
.. ..$ reg : chr "one" "one" "one" "one" ...
.. ..$ sreg: chr NA NA NA NA ...
..$ :'data.frame': 107 obs. of 3 variables:
.. ..$ dur : num 158 217 492 75 142 117 100 200 383 192 ...
.. ..$ reg : chr "one" "one" "one" "one" ...
.. ..$ sreg: chr NA NA NA NA ...
我希望使用data
和frameId
来融合列表par
。这样我的最终数据就会如此。即对列表data
中的每个元素重复frameId和par列。
frameId | par | dur | reg | sreg
答案 0 :(得分:2)
我们可以使用unnest
转换为'长'格式
library(tidyr)
unnest(d)
# A tibble: 4 x 5
# frameId par dur reg sreg
# <dbl> <dbl> <dbl> <fctr> <lgl>
#1 0 2.00 158 one NA
#2 0 2.00 177 one NA
#3 0 3.00 193 one NA
#4 0 3.00 160 one NA
library(dplyr)
d <- data_frame(frameId = c(0, 0), par = c(2, 3),
data = list(data.frame(dur = c(158, 177), reg = c("one", "one"), sreg = c(NA, NA)),
data.frame(dur = c(193, 160), reg = c("one", "one"), sreg = c(NA, NA))))