R 使用map/apply函数迭代执行连接的整洁方法

R 使用map/apply函数迭代执行连接的整洁方法,r,dplyr,left-join,purrr,tibble,R,Dplyr,Left Join,Purrr,Tibble,我想使用map/lappy连接/合并多个TIBLE/数据帧。怎么可能做到呢 可复制示例: set.seed(42) df <- tibble::tibble(rank = rep(stringr::str_c("rank",1:10),10), char_1 = sample(c("a","b","c"), size = 100, replace = TRUE), points = sample(1:1

我想使用
map
/
lappy
连接/合并多个TIBLE/数据帧。怎么可能做到呢

可复制示例:

set.seed(42)
df <- tibble::tibble(rank = rep(stringr::str_c("rank",1:10),10),
                      char_1 = sample(c("a","b","c"), size = 100, replace = TRUE),
                      points = sample(1:10000, size = 100)
                      )
my_top <- seq(10,90, by= 10) %>% 
  as.list() %>% 
  set_names(c(stringr::str_c("sample_",1:9)))

my_list_1 <- map(my_top , ~ df %>% 
sample_n(.x) %>% 
mutate(!!str_c(.x, "_score") := sample(1:10000, size = .x)))
等等。。。具有
map
功能

我试过这个:

map(as.list(names(my_top)), ~ df  %>% group_by(rank, char_1, points) %>% 
    left_join(my_list_1[[.x]] )) 

但当然,它并不是为了创建一个新的连接而将已连接的tibble保存到某个地方

一个选项是
reduce

library(dplyr)
library(purrr)
df  %>% 
    group_by(rank, char_1, points) %>% 
    list(.) %>% 
    c(., my_list_1[1:3]) %>% 
    reduce(left_join)

一个选项是
reduce

library(dplyr)
library(purrr)
df  %>% 
    group_by(rank, char_1, points) %>% 
    list(.) %>% 
    c(., my_list_1[1:3]) %>% 
    reduce(left_join)

这是我的第一个答案,我是新来的。我最近遇到了一个类似的问题,join_all是我找到的最好的解决方案

library(plyr)
#list files that are saved in your computer, for example, in txt format
files <- list.files("path", *.txt)
# open the files and save then as a list
list_of_data_frames <- lapply(files, read_delim, delim = "\t")
# merge files
merged_file <- join_all(list_of_data_frames, by = NULL)
库(plyr)
#列出以txt格式保存在计算机中的文件

这是我的第一个答案,我是新来的。我最近遇到了一个类似的问题,join_all是我找到的最好的解决方案

library(plyr)
#list files that are saved in your computer, for example, in txt format
files <- list.files("path", *.txt)
# open the files and save then as a list
list_of_data_frames <- lapply(files, read_delim, delim = "\t")
# merge files
merged_file <- join_all(list_of_data_frames, by = NULL)
库(plyr)
#列出以txt格式保存在计算机中的文件

文件,因此无法使用映射功能执行此操作?@KGeles
map
同时执行操作,但这里您希望左_连接的输出作为下一个
reduce
的输入,即假设您执行
map2(我的_列表_1,df,左_连接)
它使用df对列表的每个元素进行连接,而不是将每个连接的输出馈送到下一个TSO,以防它是另一种类型的连接?@KGeles。您使用
reduce
所做的与
for
循环连接
tmp-Arun类似,我进一步澄清并发布了。因此,使用map函数无法做到这一点?@KGeles
map
同时做事情,但在这里,您希望左连接的输出作为下一个的输入,
reduce
这样做,即假设您执行
map2(my_list_1,df,left_join)
它使用df对列表的每个元素进行连接,而不是将每个连接的输出馈送到下一个TSO,以防它是另一种类型的连接?@KGeles。您使用
reduce
所做的工作类似于
for
循环连接
tmp-Arun,我进一步澄清并发布了。我对您最后一段代码中的
group\u by
感到困惑。加入时您不需要它您现在这样做是为了准备稍后的其他呼叫吗?是的,我不需要它来加入,我应该删除它吗?不一定,这只是一个额外的步骤,对于手头的问题不需要,以后可能需要。我只是想弄清楚你要用itI做什么我被你最后一段代码中的
group\u by
搞糊涂了。加入时您不需要它您现在这样做是为了准备稍后的其他呼叫吗?是的,我不需要它来加入,我应该删除它吗?不一定,这只是一个额外的步骤,对于手头的问题不需要,以后可能需要。我只是想弄清楚你要带它去哪里