Ich habe einen Datenrahmen, den ich in eine verschachtelte Liste mit einer benutzerdefinierten Verschachtelungsebene konvertieren möchte. Dies ist, wie ich es tun, aber ich bin sicher, es gibt einen besseren Weg:Wie konvertiert man einen Datenrahmen in eine verschachtelte Liste?
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)
}))
})
Die Ausgabe in JSON wie folgt aussieht:
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"
}
]
}
]
}
]
Gibt es einen besseren Weg, dies zu tun?
, sind Sie eine Frage zu 'JSON' Ausgabe von R zu fragen, oder wie ein' R' Objekt zu schaffen, die eine ist "verschachtelte Liste" in R-Definition, z 'foo <-list (bar = NA, snafu =" Hallo, Dave "); foo [[bar]] <- Liste (a = 1, b = 2) '? –
Ich habe gerade die 'JSON'-Ausgabe gezeigt, weil sie einfacher zu verstehen ist als das R-Listenformat, aber ich möchte von R-Datenformat in R-Liste wechseln – nachocab