R: data.table, построение функции из нескольких операторов lapply - PullRequest
0 голосов
/ 05 мая 2020

В настоящее время я работаю в R, используя data.table, и пытаюсь выполнить список шагов обработки данных в длинном списке таблиц данных. У меня есть некоторые отдельные шаги и шаги, но я не уверен, как связать шаги вместе в функцию, чтобы мой список таблиц данных проходил через каждый шаг, а затем выходил в конце, объединенном с помощью rbindlist.

Вот шаги обработки данных, над которыми я работаю: 1) разделить все таблицы данных до одной переменной - "name" 2) преобразовать каждую таблицу данных, содержащую эту переменную, из длинного в широкий 3) добавить переменная "data_set", которая будет содержать имя каждой таблицы в ней 4) объединить таблицы данных вместе в одну большую таблицу данных с помощью rbindlist

Вот фрагменты кода, которые у меня есть, но я не уверен, как собрать вместе в одну функцию, так что один список передается от одного шага к следующему:

    data_tables<-c("symp", "care", "meds")
    #1)subset out variable "name" from each data table
    one<-lapply(mget(data_tables),function(x)x[, .("name")])
    #2)convert from long to wide format - I'm unsure how to send the previous list "one" from the    
    last lapply to the next step
    dt<-dt[, as.list(table(name))]
    #3)add variable "data_set" containing name of each data set in list
    one_1 <- Map(function(x, nm) as.data.table(x)[, data_set := nm], mget(one), one)
    #4)combine list of data tables together using rbindlist
    combined<-rbindlist(one_1, use.names=TRUE, fill=TRUE, idcol=NULL)

1 Ответ

1 голос
/ 05 мая 2020

Мое предложение:

Создайте функцию, которая выполняет за вас полные шаги, как показано ниже:

complete_work <- function(dt, nm){

step1 <- dt[, .("name")]
dt <- dt[, as.list(table(name))]
dt[, data_set := nm], step1 , step1)

}

После того, как вы заставите свою функцию работать для определенных c данных .table, используйте lapply:

lapply(list(symp, care, meds),  complete_work)

Если у вас есть пример ввода и вывода, было бы легче помочь вам построить ответ, который вы ищете.

...