2014-12-05 37 views
0

我试图迭代循环通过一个R DF的子集,但我有一些麻烦。 df $ A包含0-1000的值。我想根据df $ A的每个唯一值对df进行子集化,处理这些数据,将其保存为newdf,然后最终将1000个生成的newdf连接(rbind)为一个df。在R中使用循环或lapply

我目前的单次迭代(无环路)的代码是这样的:

dfA = 1 
dfA_1 <- subset(df, A == dfA) 
:: some ddply commands on dfA_1 altering its length and content :: 

编辑:澄清,在单次迭代版本,一旦我有子集,我一直在使用ddply到再统计包含一些值的行数。并非所有子集都具有所有值,因此结果可以是可变长度的。因此,我一直将结果追加到一个框架df中,该框架说明了df的某个子集可能没有包含我期望的值的任何行(即nrow = 0)的情况。理想情况下,我将每个A实例的子集定义为固定长度。我如何将它合并到单个(或多个)plyr或dplyr代码集中?

我对for循环的问题是,长度不是变量,而是df $ A的唯一值。

我的问题如下: 1.我将如何使用for循环(或某种形式的应用)来执行此操作? 2.除了生成迭代df名称之外,还可以使用这些操作来操作数据(例如,名为dfA_1的df将为dfA_x,其中x是df $ A从1到1000之一的值之一)。我目前的想法是,我会然后绑定1000个dfA_x,尽管这看起来很麻烦。

非常感谢您的任何帮助。

+0

的'dplyr'答案是好的和现代的,但即使是普通的旧'plyr'取代了需要循环和应用。如果你正在为'A'的每个级别做些什么,那么你'ddply(df,.variables =“A”,...)'。无需循环中的子集或任何这样的废话。 – Gregor 2014-12-05 19:46:14

+0

在base R中,你可以做类似'do.call(rbind,lapply(split(df,df $ A),function(sub.df){...}))''。你是什​​么意思“改变它的长度和内容”? – jlhoward 2014-12-05 21:39:03

+0

目前,我一直在使用ddply来计算一些值的nrow,但由于并不是所有的子集都包含所有的值,我然后将结果附加到一个固定长度的骨架df上。我已经在上面的问题中添加了更多信息...请让我知道是否不清楚。 – ucsbcoding 2014-12-06 00:47:10

回答