r - 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)
解决方案
我的建议是:
创建一个为您执行完整步骤的函数,如下所示:
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)
如果您有输入和输出的示例,那么帮助您构建您正在寻找的答案会更容易。
推荐阅读
- python - 从数据库调用数据而不使用 for 循环
- python - 不使用 OpenCV 的阈值
- flutter - Flutter better_player 在 Google PlayStore 中不起作用
- azure - 通过 Microsoft Graph 和 App Credentials 添加来宾邀请给 Method Not Found
- google-cloud-firestore - 在数据存储模式下使用 UUID 作为 Google Cloud Firestore 中的键是否安全?
- javascript - 从数组中抓取对象后使用对象的功能
- python - 泰勒级数展开以导出 cos 角值
- sql - 是否可以在不使用 ALTER 的情况下创建相互引用的表?
- sql - 如果我使用 5 个字符的搜索文本,则 Postgresql 不使用索引。使用 6 就可以了。为什么?
- javascript - 实时数据库规则验证是否存在具有值的数据