繁体   English   中英

在R中为列表列创建新列

[英]Creating New Columns for List Columns in 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"
  },
  {
  "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)

我做了do.call函数,结果是这样的:

        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

结果看起来不错,但我还需要插入/连接包含df数据帧上日期的列。 有没有一种方法可以将两个数据框组合在一起,或者只是一个我们也可以包含数据的代码?

您可以尝试从“ tidyr”包中使用unnest

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

在基本R中,您可以尝试(从“ df”步骤开始):

cbind(do.call(rbind, df$employee), 
      date = rep(df$date, sapply(df$employee, nrow)))

我们可以使用rbindlistlibrary(data.table)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM