6
我有一個數據幀,我想轉換爲嵌套自定義級別的嵌套列表。這就是我要做的事,但我敢肯定有一個更好的方法:如何將數據框轉換爲嵌套列表?
data <- data.frame(city=c("A", "A", "B", "B"), street=c("a", "b", "a", "b"), tenant=c("Smith","Jones","Smith","Jones"), income=c(100,200,300,400))
nested_data <- lapply(levels(data$city), function(city){
data_city <- subset(data[data$city == city, ], select=-city)
list(city = city, street_values=lapply(levels(data_city$street), function(street){
data_city_street <- subset(data_city[data_city$street == street, ], select=-street)
tenant_values <- apply(data_city_street, 1, function(income_tenant){
income_tenant <- as.list(income_tenant)
list(tenant=income_tenant$tenant, income=income_tenant$income)
})
names(tenant_values) <- NULL
list(street=street, tenant_values=tenant_values)
}))
})
在JSON的輸出是這樣的:
library(rjson)
write(toJSON(nested_data), "")
[{"city":"A","street_values":[{"street":"a","tenant_values":[{"tenant":"Smith","income":"100"}]},{"street":"b","tenant_values":[{"tenant":"Jones","income":"200"}]}]},{"city":"B","street_values":[{"street":"a","tenant_values":[{"tenant":"Smith","income":"300"}]},{"street":"b","tenant_values":[{"tenant":"Jones","income":"400"}]}]}]
# or prettified:
[
{
"city": "A",
"street_values": [
{
"street": "a",
"tenant_values": [
{
"tenant": "Smith",
"income": "100"
}
]
},
{
"street": "b",
"tenant_values": [
{
"tenant": "Jones",
"income": "200"
}
]
}
]
},
{
"city": "B",
"street_values": [
{
"street": "a",
"tenant_values": [
{
"tenant": "Smith",
"income": "300"
}
]
},
{
"street": "b",
"tenant_values": [
{
"tenant": "Jones",
"income": "400"
}
]
}
]
}
]
有沒有更好的方式來做到這一點?
所以,你問一個關於'與R輸出JSON'問題,或者如何創建一個'R'對象,它是R的定義中的「嵌套列表」,例如'foo <-list(bar = NA,snafu =「hello,Dave」); foo [[bar]] < - list(a = 1,b = 2)'? – 2013-03-04 16:59:38
我剛纔展示了'JSON'輸出,因爲它比R列表格式更容易理解,但我想從R數據框轉到R列表 – nachocab 2013-03-04 17:30:02