将嵌套列表转换为R中的数据框

时间:2019-08-31 22:28:20

标签: r dataframe

这个问题听起来好像已经在SO上问过了,但是无论如何我还是要问一下,因为现有的答案对我不起作用,而且我不确定用什么更好的措词,因为我是R的新手,所以不要完全掌握其数据类型的复杂性。

时间为一个最小的例子。我正在寻找target的转换形式,以使targetObject 精确等于referenceObject

reference = '{"airport":[{"name":"brussels","loc":{"lat":"1","lon":"2"}}],"parking":[{"name":"P1"}]}'
target =    '{"airport":{"name":"brussels","loc":{"lat":"1","lon":"2"}},"parking":{"name":"P1"}}'

referenceObject = jsonlite::fromJSON(reference)$airport
x =               jsonlite::fromJSON(target)$airport

# Transformation
targetObject = do.call(rbind.data.frame, x)

# Currently prints FALSE, should become TRUE
results_same = identical(referenceObject, targetObject)
print(results_same)

我希望这在任何语言中都非常简单,但是R似乎根据外部对象loc的形状对嵌套airport列表的处理方式非常不同。

1 个答案:

答案 0 :(得分:0)

我设法通过序列化回JSON找到了解决方案。它并不优雅,但至少可以正常工作。

# Transformation
targetObject = jsonlite::fromJSON(jsonlite::toJSON(list(x), auto_unbox = TRUE))

目前,我不会将此答案标记为正确答案,因为它比意识形态的解决方案更能解决问题。