我正在进行分析,必须为大量分销商生成一组交叉表。数据位于客户级别,每个客户都映射到分销商。由于分销商的数量很大,我正在尝试自动化这个过程。
我很难根据经销商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
,其中包含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:道歉,如果问题已在论坛中得到解答,我找不到。
答案 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)