使用“for”-loops将许多子集保存为数据帧

时间:2012-12-09 20:22:28

标签: r

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

以下是使用启动包中的示例数据框的代码示例:

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部分,否则将不需要。

1 个答案:

答案 0 :(得分:7)

使用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上进行迭代。