在运行时在R中创建数据框(动态)

时间:2013-07-04 14:56:15

标签: r dynamic for-loop dataframe

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

我很难根据经销商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

的主数据子集

错误抛出: 面对粘贴部分的问题以及将Field3指定为DiD[[1]]

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

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

PS:道歉,如果问题已在论坛中得到解答,我找不到。

2 个答案:

答案 0 :(得分:1)

此处无需使用for,子集将生成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列表。

答案 1 :(得分: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)