在运行时在R中创建数据帧(动态)
我正在进行分析,其中必须为大量分销商生成一组交叉表。数据位于客户级别,每个客户都映射到一个分销商。由于分销商的数量很大,我正在尝试自动化这个过程 我一直在基于分发服务器ID动态创建数据帧 以下是我正在尝试的:在运行时在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"&
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无需,usedlappy
是一个循环,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)