用R从数据框创建JSON列表

3
我有一个类似以下的数据框:
rnum  Field  Value  
1        Car   25.2
1        Bike 20.1
1        Taxi  100.1
2        Car   25.5   
2        Bike  19.1
2        Taxi  25.7

我希望创建一个JSON列表,其中每个元素都是由rnum分组的JSON对象。 实质上,该列表的一个元素应该像这样:
{"Car":25.2,"Bike":20.1,"Taxi":100.1,"rnum":"1"}

我尝试了df %>%group_by(rnum)%>%toJSON() ,但每行会生成3个JSON条目。

谢谢!

3个回答

3

首先要将其扩展:

df %>%
  tidyr::pivot_wider(rnum, names_from="Field", values_from="Value") %>%
  jsonlite::toJSON()
# [{"rnum":1,"Car":25.2,"Bike":20.1,"Taxi":100.1},{"rnum":2,"Car":25.5,"Bike":19.1,"Taxi":25.7}] 

3
使用' rnum '进行group_split后,使用map循环遍历list,创建一个命名的list,应用toJSON并将其展平为单个character向量。
library(dplyr)
library(purrr)
library(jsonlite)
library(tibble)
out <- df1 %>%
    group_split(rnum, .keep = FALSE) %>% 
    map_chr( ~ toJSON(as.list(deframe(.x)), auto_unbox = TRUE))

-输出

cat(out, '\n')
#{"Car":25.2,"Bike":20.1,"Taxi":100.1} {"Car":25.5,"Bike":19.1,"Taxi":25.7} 

或者使用来自base Rxtabs

toJSON(as.data.frame.matrix(xtabs(Value ~ rnum + Field, df1)))
#[{"Bike":20.1,"Car":25.2,"Taxi":100.1},{"Bike":19.1,"Car":25.5,"Taxi":25.7}] 

或者使用 data.table

library(data.table)
toJSON(dcast(setDT(df1), rnum ~ Field))

数据

df1 <- structure(list(rnum = c(1L, 1L, 1L, 2L, 2L, 2L), Field = c("Car", 
"Bike", "Taxi", "Car", "Bike", "Taxi"), Value = c(25.2, 20.1, 
100.1, 25.5, 19.1, 25.7)), class = "data.frame", row.names = c(NA, 
-6L))

1

这里还有另一种使用基本R选项的方法,可以使用reshape函数,例如:

gsub(
  "Value\\.",
  "",
  toJSON(reshape(df, direction = "wide", idvar = "rnum", timevar = "Field"))
)

这提供了

[{"rnum":1,"Car":25.2,"Bike":20.1,"Taxi":100.1},{"rnum":2,"Car":25.5,"Bike":19.1,"Taxi":25.7}] 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接