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