Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 为R中的列表列创建新列_Json_R - Fatal编程技术网

Json 为R中的列表列创建新列

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" },

我在下面有一个json代码,我试图将其转换为data.frame,但第一列最后是其他数据帧的列表

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