Создание автоматизированной функции с tidyverse, которая объединяет два набора данных, взятых из списка списка в R, который дает объединенный набор данных - PullRequest
1 голос
/ 04 апреля 2020

Я хочу создать функцию, которая объединяет два набора данных, взятых из одного и того же списка (который является списком списка), который содержит несколько объектов для каждого списка. Однако упростит мой код для удобства чтения. Таким образом, мой пример - просто фрагмент всех объектов, которые у меня есть в этом списке.

Я пытаюсь автоматизировать свой анализ и упростить мою работу. Таким образом, создание функций необходимо. Если возможно достичь этого с помощью Tidyverse, это было бы здорово. Это мое прошлое и проблема, над которой я работаю.

В любом случае, это пример списка, который у меня есть:

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)

И эта функция у меня есть попытка

 merging_datasets <- function(data_standardised = the_list_of_list, 
                              first_data = first_object_in_list, 
                              second_data = second_object_in_list, 
                              merged_data = TRUE) {


      if(merged_data == TRUE){

        first_data <- data_standardised$first_in_list[[1]]
        second_data <- data_standardised$second_in_list[[1]]

        merged_data <- merge(first_data, second_data)

      }else{

        NULL

      }

    }

с выходом объединенного набора данных нулевых значений при применении функции:

merged_dfs <-  merging_datasets(data_standardised = data_standard, first_data = dataset1, second_data = dataset2, merged_data = TRUE)

Может кто-нибудь помочь мне с этим. Опять же, это для целей автоматизации, поэтому очевидные вопросы о том, почему вы не используете уже предоставленную функцию слияния, не помогают.

1 Ответ

1 голос
/ 04 апреля 2020

Мы можем изменить функцию на

 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

      }

    }

Если мы хотим сделать это в tidyverse

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')) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...