Reputation: 659
This is my JSON file json_data as given below. It has lists with different length of columns(16 & 15). I want to create 1 data frame given lists data in JSON . How do I solve this ?
data2
[1] "{\"2020-01-01\":
[{\"contactsPerPageview\":0.015706806282722512,\"returningVisits\":30,\"rawViews\":191
,\"standardViews\":191,\"sessionToContactRate\":0.020689655172413793
,\"pageviewsPerSession\":1.3172413793103448,\"visits\":145,\"visitors\":115
,\"submissionsPerPageview\":0.015706806282722512,\"pageviewsMinusExits\":191
,\"submissions\":3,\"leads\":3,\"leadsPerView\":0.015706806282722512,\"contacts\":3
,\"newVisitorSessionRate\":0.7931034482758621}]
,\"2020-01-02\":[{\"contactsPerPageview\":0.007963594994311717
,\"returningVisits\":71,\"rawViews\":879,\"subscribers\":4,\"standardViews\":879
,\"sessionToContactRate\":0.012704174228675136,\"pageviewsPerSession\":1.5952813067150635
,\"visits\":551,\"visitors\":480,\"submissionsPerPageview\":0.007963594994311717
,\"pageviewsMinusExits\":879,\"submissions\":7,\"leads\":3
,\"leadsPerView\":0.0034129692832764505,\"contacts\":7
,\"newVisitorSessionRate\":0.8711433756805808}]}"
This is what I tried
df <- lapply(data2, function(play)
{ data.frame(matrix(unlist(play), ncol=16, byrow=T))
})
df <- do.call(rbind, df)
colnames(df) <- names(data2[[1]][[1]])
Upvotes: 0
Views: 216
Reputation: 947
You can try rbindlist
from data.table with fill
parameter set to TRUE
.
js <- "{\"2020-01-01\":
[{\"contactsPerPageview\":0.015706806282722512,\"returningVisits\":30,\"rawViews\":191
,\"standardViews\":191,\"sessionToContactRate\":0.020689655172413793
,\"pageviewsPerSession\":1.3172413793103448,\"visits\":145,\"visitors\":115
,\"submissionsPerPageview\":0.015706806282722512,\"pageviewsMinusExits\":191
,\"submissions\":3,\"leads\":3,\"leadsPerView\":0.015706806282722512,\"contacts\":3
,\"newVisitorSessionRate\":0.7931034482758621}]
,\"2020-01-02\":[{\"contactsPerPageview\":0.007963594994311717
,\"returningVisits\":71,\"rawViews\":879,\"subscribers\":4,\"standardViews\":879
,\"sessionToContactRate\":0.012704174228675136,\"pageviewsPerSession\":1.5952813067150635
,\"visits\":551,\"visitors\":480,\"submissionsPerPageview\":0.007963594994311717
,\"pageviewsMinusExits\":879,\"submissions\":7,\"leads\":3
,\"leadsPerView\":0.0034129692832764505,\"contacts\":7
,\"newVisitorSessionRate\":0.8711433756805808}]}"
a<- jsonlite::fromJSON(js)
rbindlist(a,fill = T)
Gives:
contactsPerPageview returningVisits rawViews standardViews sessionToContactRate pageviewsPerSession visits visitors submissionsPerPageview pageviewsMinusExits submissions leads leadsPerView
1: 0.015706806 30 191 191 0.02068966 1.317241 145 115 0.015706806 191 3 3 0.015706806
2: 0.007963595 71 879 879 0.01270417 1.595281 551 480 0.007963595 879 7 3 0.003412969
contacts newVisitorSessionRate subscribers
1: 3 0.7931034 NA
2: 7 0.8711434 4
Upvotes: 2