0

我正在分析必须为大量分销商生成一组交叉表。数据位于客户级别,每个客户都映射到分销商。由于分销商的数量很大,我正在尝试使流程自动化。

我陷入了基于分销商 ID 动态创建数据帧的困境

这是我正在尝试的:

for (i in 1:length(DiD)){ #vector comprising list of distributors
    paste("use",DiD[[1]],sep="_") <- subset(master table, Field1=="NA"& Field2=="valid" & Field3==as.character(DiD[[1]])) 
}

附加信息:

DiD[[1]] = 1234

期望的输出:use_1234包含主数据子集的 数据帧Field1Field2DiD=1234

引发的错误: 面临粘贴部分的问题以及指定Field3DiD[[1]]

Error in eval(expr, envir, enclos) :
dims [product 1] do not match the length of object [529]

我希望我已经提供了足够的信息。万分感谢!

PS:如果问题已经在论坛中得到解答,我无法找到它,请见谅。

4

2 回答 2

1

这里不需要使用for,subset会生成一个data.frame:

 res <- subset(master.table,Field1== NA & 
                            Field2=="valid" & 
                            Field3==as.character(DiD[[1]])) 

那么你可以使用assign

  assign(paste("use",DiD[[1]],sep="_"),res)

我想,你需要这样的东西,假设这DiD是一个名字列表:

 list.df <- lapply(DiD, function(x)  subset(master.table,is.na(Field1) & 
                            Field2=="valid" & 
                            Field3==as.character(x)))
 names(list.df) <- DiD

这将创建一个命名的 data.frames 列表。

于 2013-07-04T15:07:33.117 回答
0

我想你也可以使用split

dfs <- 
split(master.table[master.table$Field1=="NA" & # probably should be is.na(master.table$Field1), but we don't have the data
                   master.table$Field2=="valid",], Field3)
于 2013-07-04T15:17:24.357 回答