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

在运行时在R中创建数据帧(动态),r,dynamic,for-loop,dataframe,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"&

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

我一直在基于分发服务器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
所需输出: 数据框
使用_1234
,其中包含通过
Field1
Field2
DiD=1234

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

Error in eval(expr, envir, enclos) :
dims [product 1] do not match the length of object [529]
我希望我已经提供了足够的信息。非常感谢


PS:抱歉,如果问题在论坛中得到了回答,我找不到它。

无需在此处使用
for
,subset将生成一个数据框:

 res <- subset(master.table,Field1== NA & 
                            Field2=="valid" & 
                            Field3==as.character(DiD[[1]])) 
我想,您需要这样的东西,假设
DiD
是一个名称列表:

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

list.df我想您也可以使用
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)

dfs您可能需要查看
assign
。此外,最好避免使用
子集
,而使用
[
。谢谢@Thomas,我会检查assign。另一个问题是动态创建数据帧名称。您对其中可能出现的问题有何看法?@agstudy使用
assign
为您提供了一个很好的答案,这可能会解决您的问题。我将尝试@agstudy,我将添加一些虚拟表以使问题更清楚。谢谢您的帮助建议。我还将在破解后添加一个答案this@RaamaVi您应该阅读Thank@agstudy。我将尝试在for循环中包含2个代码片段,以处理所有数据帧DiD[1:n]@RaamaVi无需,used
lappy
是一个循环,data.frame或list也是一个循环?您可以添加
str(DiD)吗
这太棒了,我会尝试一下,然后再联系你们。
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)