使用tidyverse创建一个自动函数,该函数合并从R中的列表中获取的两个数据集,该列表给出合并的数据集
我想创建一个函数,合并来自同一个列表(列表列表)的两个数据集,每个列表包含多个对象。然而,为了可读性,我将简化我的代码。因此,我的示例只是这个列表中所有对象的一个片段 我正在尝试自动化我的分析,并简化我的工作。因此,创建函数是必要的。如果有可能用tidyverse实现这一点,那将是非常棒的。这是我的背景和我手头的问题 无论如何,这就是我的清单的例子:使用tidyverse创建一个自动函数,该函数合并从R中的列表中获取的两个数据集,该列表给出合并的数据集,r,function,tidyverse,R,Function,Tidyverse,我想创建一个函数,合并来自同一个列表(列表列表)的两个数据集,每个列表包含多个对象。然而,为了可读性,我将简化我的代码。因此,我的示例只是这个列表中所有对象的一个片段 我正在尝试自动化我的分析,并简化我的工作。因此,创建函数是必要的。如果有可能用tidyverse实现这一点,那将是非常棒的。这是我的背景和我手头的问题 无论如何,这就是我的清单的例子: list(dataset1: list of 2: ..data: config_path: chr "c
list(dataset1: list of 2:
..data:
config_path: chr "config_direct/dataset1/"
dataset2: list of 2:
..data: Classes
config_path: chr "config_direct/dataset2/")
它是在波纹管的基础上形成的
ID <- c(101, 102, 2013)
Name <- c("Chris", "Mary", "Ana")
salary <- c(100, 200, 300)
dataset1 <- tibble::tibble(ID, Name, salary)
ID <- c(104, 105, 106)
Name <- c("John", "Christine", "Thomas")
salary <- c(150, 250, 330)
ID我们可以将函数更改为
merging_datasets <- function(data_standardised = the_list_of_list, obs_names_to_merge,
merged_data = TRUE) {
if(merged_data){
Reduce(function(...) merge(...), data_standarised[obs_names_to_merge])
}else{
NULL
}
}
或使用
data_standardised %>%
map(pluck, 'data') %>%
reduce(left_join)
数据
data\u标准化感谢您的支持。你能解释一下Reduce是什么,函数(…)是什么吗?合并(…)?因为在列表中我有更多的对象、路径等。因此,需要重试数据。我已经用列表中包含的内容更改了代码。希望您的代码能够在不考虑更改的情况下工作。是的,更改了列表的实际列表。非常感谢。我的列表有两个对象。每个对象都有数据和路径。但只希望检索两个对象的数据。但不是路径,因为我对它包含的其他东西不感兴趣。我现在清楚了吗?我已经更新了第一个代码。这是一个剪下来的列表是什么样子的。我希望它更好
merging_datasets <- function(data_standardised = the_list_of_list, obs_names_to_merge,
merged_data = TRUE) {
if(merged_data){
Reduce(function(...) merge(...), data_standarised[obs_names_to_merge])
}else{
NULL
}
}
library(purrr)
library(dplyr)
data_standardised %>%
map(pluck, 1) %>%
reduce(left_join)
data_standardised %>%
map(pluck, 'data') %>%
reduce(left_join)
data_standardised <- list(dataset1 = list(data = dataset1, config_path = 'xyz'),
dataset2 = list(data = dataset2, config_path = 'another xyz'))