使用 "for" 循环将许多子集另存为数据帧



这个问题可能很简单,但我找不到解决它的好方法:我有一个包含许多子组的数据集,这些子组需要单独分析。因此,我想为组使用子集,并将它们用于以后的分析。同样,将子集定义为分析应部分使用循环完成,以节省空间并确保对所有子组执行相同的分析。

下面是使用引导包中的示例数据帧的代码示例:

data(aids)
qlist <- c("1","2","3","4")
for (i in length(qlist)) {
    paste("aids.sub.",qlist[i],sep="") <- subset(aids, quarter==qlist[i])
}

包含数据集中子组的变量存储为字符串,因此我添加了 qlist 部分,否则不需要。

使用 lapply 列出子集:

lapply(qlist, function(x) subset(aids, quarter==x))

等价地,避免subset()

lapply(qlist, function(x) aids[aids$quarter==x,])

使用列表可能会使后续代码更易于编写和理解。 您可以对列表进行子集化以获取单个数据框(就像您可以使用其中一个子集一样,如下所示)。 但您也可以迭代它(使用 forlapply ),而无需构造变量名称。

要按照您的要求完成工作,请使用assign

for (i in qlist) {
   assign(paste("aids.sub.",i,sep=""), subset(aids, quarter==i))
}

请注意删除了length()函数,这是直接迭代qlist

最新更新