首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何合并两个嵌套列?

如何合并两个嵌套列?
EN

Stack Overflow用户
提问于 2022-08-15 06:55:50
回答 2查看 70关注 0票数 0

我有以下数据集:

代码语言:javascript
复制
> ex
# A tibble: 98 × 5
   Country    pred_data         data             model     prdct     
   <chr>      <list>            <list>           <list>    <list>    
 1 Albania    <tibble [10 × 2]> <tibble [9 × 3]> <betareg> <dbl [10]>
 2 Angola     <tibble [10 × 2]> <tibble [9 × 3]> <betareg> <dbl [10]>
 3 Azerbaijan <tibble [10 × 2]> <tibble [9 × 3]> <betareg> <dbl [10]>
 4 Algeria    <tibble [10 × 2]> <tibble [9 × 3]> <betareg> <dbl [10]>
 5 Armenia    <tibble [10 × 2]> <tibble [9 × 3]> <betareg> <dbl [10]>
 6 Laos       <tibble [10 × 2]> <tibble [9 × 3]> <betareg> <dbl [10]>
 7 Argentina  <tibble [10 × 2]> <tibble [9 × 3]> <betareg> <dbl [10]>
 8 Austria    <tibble [10 × 2]> <tibble [9 × 3]> <betareg> <dbl [10]>
 9 Barbados   <tibble [10 × 2]> <tibble [9 × 3]> <betareg> <dbl [10]>
10 Belgium    <tibble [10 × 2]> <tibble [9 × 3]> <betareg> <dbl [10]>
# … with 88 more rows
# ℹ Use `print(n = ...)` to see more rows

我正在尝试创建一个新列,即mergecbind of pred_dataprdct,它应该将数据集看作<tibble [10 × 3]>,但当我编写以下代码时:

代码语言:javascript
复制
res <- ex %>%
  group_by(Country) %>%
  nest() %>%
  mutate(pr2 = map2(pred_data, prdct, merge)) %>%
  ungroup()

它给出了以下错误:

代码语言:javascript
复制
Error in `mutate()`:
! Problem while computing `pr2 = map2(pred_data, prdct, merge)`.
ℹ The error occurred in group 1: Country = "Albania".
Caused by error in `map2()`:
! object 'pred_data' not found
Backtrace:
 1. ... %>% ungroup()
 8. purrr::map2(pred_data, prdct, merge)

有人知道我做错了什么吗?有人能帮我得到通缉的结果吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-15 07:12:23

问题是,在使用nest之前,您需要对数据进行map2,这是不必要的。另外,对于您想要的结果,请使用cbind而不是merge

使用一些基于gapminder数据集的假示例数据:

代码语言:javascript
复制
library(gapminder)
library(dplyr, warn=FALSE)
library(tidyr)
library(purrr)

# example data
gap_nested <- gapminder %>%
  group_by(country) %>%
  nest() %>%
  mutate(prdct = map(country, ~ runif(12))) 

gap_nested <- gap_nested %>%
  mutate(data = map2(data, prdct, ~ cbind(.x, prdct = .y)))

head(gap_nested)
#> # A tibble: 6 × 3
#> # Groups:   country [6]
#>   country     data          prdct     
#>   <fct>       <list>        <list>    
#> 1 Afghanistan <df [12 × 6]> <dbl [12]>
#> 2 Albania     <df [12 × 6]> <dbl [12]>
#> 3 Algeria     <df [12 × 6]> <dbl [12]>
#> 4 Angola      <df [12 × 6]> <dbl [12]>
#> 5 Argentina   <df [12 × 6]> <dbl [12]>
#> 6 Australia   <df [12 × 6]> <dbl [12]>

gap_nested$data[[1]]
#>    continent year lifeExp      pop gdpPercap      prdct
#> 1       Asia 1952  28.801  8425333  779.4453 0.08012722
#> 2       Asia 1957  30.332  9240934  820.8530 0.82086328
#> 3       Asia 1962  31.997 10267083  853.1007 0.80174251
#> 4       Asia 1967  34.020 11537966  836.1971 0.31049317
#> 5       Asia 1972  36.088 13079460  739.9811 0.32704996
#> 6       Asia 1977  38.438 14880372  786.1134 0.68114361
#> 7       Asia 1982  39.854 12881816  978.0114 0.75686794
#> 8       Asia 1987  40.822 13867957  852.3959 0.40456933
#> 9       Asia 1992  41.674 16317921  649.3414 0.83969222
#> 10      Asia 1997  41.763 22227415  635.3414 0.64467924
#> 11      Asia 2002  42.129 25268405  726.7341 0.34743910
#> 12      Asia 2007  43.828 31889923  974.5803 0.54325215
票数 1
EN

Stack Overflow用户

发布于 2022-08-15 10:25:59

我们也可以不使用map,只要我们将它保留为列表列:

代码语言:javascript
复制
library(dplyr)

ex |>
  group_by(country)
  mutate(pr2 = list(bind_cols(data, tibble(prdct = prdct)))) |>
  ungroup()

输出:

代码语言:javascript
复制
# A tibble: 142 × 4
# Groups:   country [142]
   country     data              prdct      pr2              
   <fct>       <list>            <list>     <list>           
 1 Afghanistan <tibble [12 × 5]> <dbl [12]> <tibble [12 × 6]>
 2 Albania     <tibble [12 × 5]> <dbl [12]> <tibble [12 × 6]>
 3 Algeria     <tibble [12 × 5]> <dbl [12]> <tibble [12 × 6]>
 4 Angola      <tibble [12 × 5]> <dbl [12]> <tibble [12 × 6]>
 5 Argentina   <tibble [12 × 5]> <dbl [12]> <tibble [12 × 6]>
 6 Australia   <tibble [12 × 5]> <dbl [12]> <tibble [12 × 6]>
 7 Austria     <tibble [12 × 5]> <dbl [12]> <tibble [12 × 6]>
 8 Bahrain     <tibble [12 × 5]> <dbl [12]> <tibble [12 × 6]>
 9 Bangladesh  <tibble [12 × 5]> <dbl [12]> <tibble [12 × 6]>
10 Belgium     <tibble [12 × 5]> <dbl [12]> <tibble [12 × 6]>
# … with 132 more rows

数据(受@stefan启发):

代码语言:javascript
复制
library(gapminder)
library(dplyr)

ex <-
  gapminder |>
  group_by(country) |>
  nest() |>
  mutate(prdct = list(runif(12))) |>
  ungroup()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73357731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档