Json 为R中的列表列创建新列
我在下面有一个json代码,我试图将其转换为data.frame,但第一列最后是其他数据帧的列表Json 为R中的列表列创建新列,json,r,Json,R,我在下面有一个json代码,我试图将其转换为data.frame,但第一列最后是其他数据帧的列表 library(jsonlite) json_emp<-' [ {"employee": [ { "name": "person1", "ID": 1 }, { "name": "person2", "ID": 2 }, { "name": "person3", "ID": 3 } ], "date": "11-24-2015" },
library(jsonlite)
json_emp<-' [ {"employee": [
{
"name": "person1",
"ID": 1
},
{
"name": "person2",
"ID": 2
},
{
"name": "person3",
"ID": 3
}
],
"date": "11-24-2015"
},
{
"employee": [
{
"name": "person1",
"ID": 1
},
{
"name": "person2",
"ID": 2
}
],
"date": "11-25-2015"
},
{
"employee": [
{
"name": "person1",
"ID": 1
}
],
"date": "11-26-2015"
}
]'
df<- fromJSON(json_emp)
do.call("rbind",df$employee)
结果看起来不错,但我还需要插入/连接
df
dataframe上包含日期的列。有没有一种方法可以将两个数据框组合起来,或者只使用一个代码就可以包含数据?您可以尝试使用“tidyr”软件包中的unnest
:
在base R中,您可以尝试(从“df”步骤开始):
我们可以使用
library(data.table)
你试过使用unlist()命令,然后使用do.call吗?为什么不在事后使用它呢
cbind(do.call(rbind,df$employee),df[“date”])
@thelatemail,因为答案可能是错误的。这只会循环使用日期值。您需要执行cbind(do.call(rbind,df$employee),date=rep(df$date,sapply(df$employee,nrow))
或类似操作。@AnandaMahto-好的。。。。是的,我只是在测试你。。。绝对没有忽视这一点。
date name ID
1 11-24-2015 person1 1
2 11-24-2015 person2 2
3 11-24-2015 person3 3
4 11-25-2015 person1 1
5 11-25-2015 person2 2
6 11-26-2015 person1 1
library(tidyr)
unnest(fromJSON(json_emp), employee)
# Source: local data frame [6 x 3]
#
# date name ID
# (chr) (chr) (int)
# 1 11-24-2015 person1 1
# 2 11-24-2015 person2 2
# 3 11-24-2015 person3 3
# 4 11-25-2015 person1 1
# 5 11-25-2015 person2 2
# 6 11-26-2015 person1 1
cbind(do.call(rbind, df$employee),
date = rep(df$date, sapply(df$employee, nrow)))
library(data.table)#v1.9.6+
rbindlist(with(df, setNames(employee,date)), idcol=TRUE)
# .id name ID
#1: 11-24-2015 person1 1
#2: 11-24-2015 person2 2
#3: 11-24-2015 person3 3
#4: 11-25-2015 person1 1
#5: 11-25-2015 person2 2
#6: 11-26-2015 person1 1