取消嵌套具有不同数据类型的 tibbles 列表列(不能组合双精度和字符)
Unnest a list-column of tibbles with different data type (cannot combine double and character)
我想取消嵌套的 tibble,但是出现错误。
示例数据:
library(tidyverse)
df <- tribble(
~x, ~y,
1, tibble(a=1, b=2),
2, tibble(a=4:5, b=c("thank","you"),c=1:2))
df
#> # A tibble: 2 x 2
#> x y
#> <dbl> <list>
#> 1 1 <tibble [1 x 2]>
#> 2 2 <tibble [2 x 3]>
df %>% unnest(y)
#> Error: Can't combine `..1$b` <double> and `..2$b` <character>.
由 reprex package (v2.0.1)
于 2021-11-03 创建
我想我必须将 y 中列出的所有 tibbles 的数据类型更改为字符,但我无法做到这一点。
可能有更优雅的方法,但这行得通。把tribble变成字符,然后你就可以组合了。您很可能只需将列 'b' 更改为相同的 class 就可以了。
图书馆(tidyverse)
df <- tribble(
~x, ~y,
1, tibble(a=1, b=2),
2, tibble(a=4:5, b=c("thank","you"),c=1:2))
df$y[[1]] <- purrr::map_df(df$y[[1]], as.character)
df$y[[2]] <- purrr::map_df(df$y[[2]], as.character)
df %>% unnest(y)
从原始数据开始,您真正需要做的就是将第一个嵌套小标题中 b 的 class 更改为字符。
df$y[[1]]$b <- as.character(df$y[[1]]$b )
df %>% unnest(y)
也许是以下?
library(tidyverse)
df <- tribble(
~x, ~y,
1, tibble(a=1, b=2),
2, tibble(a=4:5, b=c("thank","you"),c=1:2))
df %>%
mutate(y = map(y, ~ mutate(.x, b = as.character(b)))) %>%
unnest(cols = c(y))
#> # A tibble: 3 × 4
#> x a b c
#> <dbl> <dbl> <chr> <int>
#> 1 1 1 2 NA
#> 2 2 4 thank 1
#> 3 2 5 you 2
我想取消嵌套的 tibble,但是出现错误。
示例数据:
library(tidyverse)
df <- tribble(
~x, ~y,
1, tibble(a=1, b=2),
2, tibble(a=4:5, b=c("thank","you"),c=1:2))
df
#> # A tibble: 2 x 2
#> x y
#> <dbl> <list>
#> 1 1 <tibble [1 x 2]>
#> 2 2 <tibble [2 x 3]>
df %>% unnest(y)
#> Error: Can't combine `..1$b` <double> and `..2$b` <character>.
由 reprex package (v2.0.1)
于 2021-11-03 创建我想我必须将 y 中列出的所有 tibbles 的数据类型更改为字符,但我无法做到这一点。
可能有更优雅的方法,但这行得通。把tribble变成字符,然后你就可以组合了。您很可能只需将列 'b' 更改为相同的 class 就可以了。
图书馆(tidyverse)
df <- tribble(
~x, ~y,
1, tibble(a=1, b=2),
2, tibble(a=4:5, b=c("thank","you"),c=1:2))
df$y[[1]] <- purrr::map_df(df$y[[1]], as.character)
df$y[[2]] <- purrr::map_df(df$y[[2]], as.character)
df %>% unnest(y)
从原始数据开始,您真正需要做的就是将第一个嵌套小标题中 b 的 class 更改为字符。
df$y[[1]]$b <- as.character(df$y[[1]]$b )
df %>% unnest(y)
也许是以下?
library(tidyverse)
df <- tribble(
~x, ~y,
1, tibble(a=1, b=2),
2, tibble(a=4:5, b=c("thank","you"),c=1:2))
df %>%
mutate(y = map(y, ~ mutate(.x, b = as.character(b)))) %>%
unnest(cols = c(y))
#> # A tibble: 3 × 4
#> x a b c
#> <dbl> <dbl> <chr> <int>
#> 1 1 1 2 NA
#> 2 2 4 thank 1
#> 3 2 5 you 2