将数据帧连接到purrr::map中的嵌套数据帧_*

将数据帧连接到purrr::map中的嵌套数据帧_*,r,tidyr,purrr,R,Tidyr,Purrr,我的目标是将数据帧连接到嵌套列表列中的数据帧,例如: data(mtcars) library(tidyr) library(purrr) mtcars_nest <- mtcars %>% rownames_to_column() %>% rename(rowname_1 = rowname) %>% select(-mpg) %>% group_by(cyl) %>% nest() mtcars_mpg <- mtcars %>% rowna

我的目标是将数据帧连接到嵌套列表列中的数据帧,例如:

data(mtcars)
library(tidyr)
library(purrr)

mtcars_nest <- mtcars %>% rownames_to_column() %>% rename(rowname_1 = rowname) %>% select(-mpg) %>% group_by(cyl) %>% nest()
mtcars_mpg <- mtcars %>% rownames_to_column() %>% rename(rowname_2 = rowname) %>% select(rowname_2, mpg)

join_df <- function(df_nest, df_other) {
  df_all <- df_nest %>% inner_join(df_other, by = c("rowname_1" = "rowname_2"))
}

join_df <- mtcars_nest %>%
  mutate(new_mpg = map_df(data, join_df(., mtcars_mpg)))
因此,从嵌套输入接收的数据帧
map.*
没有提供列名(即
rowname_1
)来参与联接。我不明白为什么会这样。我正在传递包含嵌套数据帧中的数据帧的
data
列。 我想要一个数据帧输出,可以添加到输入嵌套数据帧中的新列中,例如

| rowname_1 | cyl | disp |...|mpg|
|:----------|:----|:-----|:--|:--|
有几件事:

  • 您应该使用tilde函数化(在
    purrr
    中)函数参数到
    映射*
    ;及
  • 我认为你应该使用
    map
    而不是
    map\u-df
    ,虽然我不能确切地找到
    map\u-df
    不起作用的原因,但没有它我可以得到你想要的行为
小结:

  • 您在
    join_df()
    中分配给
    df_all
    ,它工作的唯一原因是该分配不可见地返回您分配给
    df_all
    的内容;我建议你应该明确:要么跟进
    return(df\u all)
    ,要么就是不分配它,以
    internal\u join(…)
    结束
试试这个:

library(tibble) # rownames_to_column
library(dplyr)
library(tidyr)  # nest
library(purrr)

join_df <- function(df_nest, df_other) {
  df_all <- inner_join(df_nest, df_other, by = c("rowname_1" = "rowname_2"))
  return(df_all)
}

mtcars_nest %>%
  mutate(new_mpg = map(data, ~ join_df(., mtcars_mpg)))
# # A tibble: 3 x 3
#     cyl data               new_mpg           
#   <dbl> <list>             <list>            
# 1    6. <tibble [7 x 10]>  <tibble [7 x 11]> 
# 2    4. <tibble [11 x 10]> <tibble [11 x 11]>
# 3    8. <tibble [14 x 10]> <tibble [14 x 11]>
并获得嵌套的和现在增强的帧。

有几件事:

  • 您应该使用tilde函数化(在
    purrr
    中)函数参数到
    映射*
    ;及
  • 我认为你应该使用
    map
    而不是
    map\u-df
    ,虽然我不能确切地找到
    map\u-df
    不起作用的原因,但没有它我可以得到你想要的行为
小结:

  • 您在
    join_df()
    中分配给
    df_all
    ,它工作的唯一原因是该分配不可见地返回您分配给
    df_all
    的内容;我建议你应该明确:要么跟进
    return(df\u all)
    ,要么就是不分配它,以
    internal\u join(…)
    结束
试试这个:

library(tibble) # rownames_to_column
library(dplyr)
library(tidyr)  # nest
library(purrr)

join_df <- function(df_nest, df_other) {
  df_all <- inner_join(df_nest, df_other, by = c("rowname_1" = "rowname_2"))
  return(df_all)
}

mtcars_nest %>%
  mutate(new_mpg = map(data, ~ join_df(., mtcars_mpg)))
# # A tibble: 3 x 3
#     cyl data               new_mpg           
#   <dbl> <list>             <list>            
# 1    6. <tibble [7 x 10]>  <tibble [7 x 11]> 
# 2    4. <tibble [11 x 10]> <tibble [11 x 11]>
# 3    8. <tibble [14 x 10]> <tibble [14 x 11]>

并获得嵌套的和现在增强的帧。

缺少
库(dplyr);库(TIBLE)
。缺少
库(dplyr);库(tibble)
。谢谢@r2evans。关于
~
的好提示。没有意识到
~
对评估的影响。对于其他人,请参阅此帖子谢谢@r2evans。关于
~
的好提示。没有意识到
~
对评估的影响。对于其他人,请参阅此帖子
mtcars_nest %>%
  mutate(data = map(data, ~ join_df(., mtcars_mpg)))
# # A tibble: 3 x 2
#     cyl data              
#   <dbl> <list>            
# 1    6. <tibble [7 x 11]> 
# 2    4. <tibble [11 x 11]>
# 3    8. <tibble [14 x 11]>