处理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