首页 > 解决方案 > R:data.table 从多个 lapply 语句中构建一个函数

问题描述

我目前正在使用 data.table 在 R 中工作,并且正在尝试在一长串数据表中完成数据处理步骤列表。我已经弄清楚了一些单独的 lapply 和步骤,但我不确定如何将这些步骤链接到一个函数中,以便我的数据表列表通过每个步骤,然后在最后使用 rbindlist 组合出来。

以下是我正在努力完成的数据处理步骤:1)将所有数据表子集为一个变量 - “名称” 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)

标签: rdata.table

解决方案


我的建议是:

创建一个为您执行完整步骤的函数,如下所示:

complete_work <- function(dt, nm){

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

}

一旦你的函数适用于特定的 data.table,请使用 lapply:

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

如果您有输入和输出的示例,那么帮助您构建您正在寻找的答案会更容易。


推荐阅读