编辑V2:修复了示例,添加了预期输出
我正在尝试基于两个表动态创建一堆数据表(子集)。第一个表是主数据集,包含所有数据:
require(data.table)
Doc_ID <- c(3631154, 3631545, 318801)
document_type <- c('Customer Letter', 'Customer Letter', 'Refund Application')
Pages <- c(2,12,53)
dataset <- data.table (Doc_ID, document_type, Pages)
第二个表包含创建动态表所需的所有两个参数 - 主数据集的非重叠子集。
document_type <- c('Customer Letter', 'Refund Application')
MoreThan3SD <- c(2, 22)
DocTableName <-c ('dt_Cust_Ltr', 'dt_Refund_App')
sdset <- data.table(document_type, MoreThan3SD, DocTableName)
我试图在概念上得到类似这样的代码:
[sdset$DocTableName] <- dataset[document_type == sdset$document_type][Pages > sdset$MoreThan3SD][Pages > 0]
进入这样的结果:
dt_Cust_Ltr <- dataset[document_type =='Customer Letter' & Pages > 2]
dt_Refund_App <- dataset[document_type =='Refund Application' & Pages > 22]
也就是说,有没有办法使用apply函数遍历sdset中的每一行,根据sdset的每一行中的信息动态创建新表 - 比如将sdset的每一行迭代到SQL SELECT INTO中查询?
答案 0 :(得分:1)
试试这个:
library(data.table)
Doc_ID <- c(3631154, 3631545, 318801)
document_type <- c('Customer Letter', 'Customer Letter', 'Refund Application')
Pages <- c(2,12,53)
dataset <- data.table (Doc_ID, document_type, Pages)
document_type <- c('Customer Letter', 'Refund Application')
MoreThan3SD <- c(2, 22)
DocTableName <-c ('dt_Cust_Ltr', 'dt_Refund_App')
sdset <- data.table(document_type, MoreThan3SD, DocTableName)
foo <- merge(dataset, sdset, by = "document_type")[Pages > MoreThan3SD]
for (doc_table_name in unique(foo$DocTableName)) {
assign(doc_table_name, value = foo[DocTableName == doc_table_name, .(Doc_ID, document_type, Pages)])
}
print(grep("dt", ls(), value = T))
print(dt_Cust_Ltr)
print(dt_Refund_App)
# > print(grep("dt", ls(), value = T))
# [1] "dt_Cust_Ltr" "dt_Refund_App"
# > print(dt_Cust_Ltr)
# Doc_ID document_type Pages
# 1: 3631545 Customer Letter 12
# > print(dt_Refund_App)
# Doc_ID document_type Pages
# 1: 318801 Refund Application 53