gpt4 book ai didi

r - 使用 tidyr unnest 和 NULL 值

转载 作者:行者123 更新时间:2023-12-02 02:26:20 28 4
gpt4 key购买 nike

我将 JSON 文件转换为具有嵌套列表结构的 data.frame,我想取消嵌套并展平该结构。列表中的某些值为 NULL,unnest 不接受该值。如果我用仅包含 NA 值的 data.frame 结构替换 NULL 值,我会得到所需的结果。

下面是我的问题的简化示例。我尝试用 NA data.frame 替换 NULL 值,但由于嵌套结构而未能成功。我怎样才能达到预期的结果?

示例

library(tidyr)
input1 <- data.frame(id = c("c", "d", "e"), value = c(7, 8, 9))
input2 <- NULL
input3 <- data.frame(id = c(NA), value = c(NA))

df <- dplyr::tibble(
a = c(1, 2),
b = list(a = input1, c = input2))
unnest(df)

给出错误“错误:每列必须是向量列表或数据框列表 [b]”

df2 <- dplyr::tibble(
a = c(1, 2),
b = list(a = input1, c = input3))
unnest(df2)

给出所需的输出。

最佳答案

我们可以在这里使用purrr中的map_lgl。如果您不关心那些带有 NULL 的行,您可以简单地使用 filterunnest 删除它们:

library(tidyverse)

df %>%
filter(!map_lgl(b, is.null)) %>%
unnest()
#> # A tibble: 3 x 3
#> a id value
#> <dbl> <fctr> <dbl>
#> 1 1 c 7
#> 2 1 d 8
#> 3 1 e 9

如果您想保留这些行,可以在取消嵌套后使用 right_join 将它们恢复:

df %>% 
filter(!map_lgl(b, is.null)) %>%
unnest() %>%
right_join(select(df, a))
#> Joining, by = "a"
#> # A tibble: 4 x 3
#> a id value
#> <dbl> <fctr> <dbl>
#> 1 1 c 7
#> 2 1 d 8
#> 3 1 e 9
#> 4 2 <NA> NA

数据

input1 <- data.frame(id = c("c", "d", "e"), value = c(7, 8, 9))
input2 <- NULL
input3 <- data.frame(id = c(NA), value = c(NA))

df <- dplyr::tibble(
a = c(1, 2),
b = list(a = input1, c = input2)
)

关于r - 使用 tidyr unnest 和 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47224831/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com