[英]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)))
我們可以使用rbindlist
從library(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.