處理API時會出現很多問題。大多數時候,爲了做真正的分析,我想讓我的數據集整齊,但通常情況下,這需要針對每種類型樹的解決方案,而不是更通用的解決方案。整齊的嵌套json樹
我想這將是不錯的生成整齊的數據(儘管有許多不同的因子水平一噸NA在深度嵌套樹的一個功能。
我有如下,用unlist(..., recursive = FALSE)
一個hackish的解決方案+命名約定,
但我想看看是否有人在這裏可能有一個更好的解決方案來整理這些類型的列表結構。
#####################
# Some Test Data
aNestedTree =
list(a = 1,
b = 2,
c = list(
a = list(1:5),
b = 2,
c = list(
a = 1,
d = 3,
e = list())),
d = list(
y = 3,
z = 2
))
############################################################
# Run through the list and rename all list elements,
# We unlist once at time, adding "__" at each unlist step
# until the object is no longer a list
renameVars <- function(lst, sep = '__') {
if(is.list(lst)) {
names(lst) <- paste0(names(lst),sep)
renameVars(unlist(lst, recursive = FALSE),sep = sep)
} else {
lst
}
}
res <- renameVars(aNestedTree)
我們可以檢查輸出,看看我們有一個奇怪命名對象, 但有一種方法來這個瘋狂。
> res
a________ b________ c__.a____1__ c__.a____2__ c__.a____3__
1 2 1 2 3
c__.a____4__ c__.a____5__ c__.b______ c__.c__.a____ c__.c__.d____
4 5 2 1 3
d__.y______ d__.z______
3 2
現在我把它放在data.table
,所以我可以塑造它。
library(data.table)
dt <- data.table(values = res, name = names(res))
# Use some regex to split that name up, along with data.table's tstrsplit
# function to separate them into as many columns as there are nests
> dt[,paste0('V',seq_along(s <- tstrsplit(dt$name,'[__]+(\\.|)'))) := s]
> dt
values name V1 V2 V3
1: 1 a________ a NA NA
2: 2 b________ b NA NA
3: 1 c__.a____1__ c a 1
4: 2 c__.a____2__ c a 2
5: 3 c__.a____3__ c a 3
6: 4 c__.a____4__ c a 4
7: 5 c__.a____5__ c a 5
8: 2 c__.b______ c b NA
9: 1 c__.c__.a____ c c a
10: 3 c__.c__.d____ c c d
11: 3 d__.y______ d y NA
12: 2 d__.z______ d z NA
然後我就可以過濾出我想要的因子組合(或者dcast
/spread
)。 (儘管如果它們存在,我可以有效地將表分爲最低級別)
我想過要通過bind.c並拔出do_unlist
以通過Rcpp創建一個靈活的命名約定,但是我的C++是生鏽的,所以我想我會在我做任何事情之前張貼在這裏。
你看過'data.tree'嗎? [data.tree intro](https://cran.r-project.org/web/packages/data.tree/vignettes/data.tree.html) [data.tree application](https://cran.r -project.org/web/packages/data.tree/vignettes/applications.html)和[這個問題](http://stackoverflow.com/questions/31339805/converting-json-format-to-csv-to-upload -data-table-in-r-to-produce-d3-bubble-cha) – dracodoc
現在翻看它,這看起來很有希望 – Shape