在R中使用循环或lappy

在R中使用循环或lappy,r,for-loop,plyr,lapply,R,For Loop,Plyr,Lapply,我试图迭代地循环遍历R df的子集,但遇到了一些问题。df$A包含0-1000之间的值。我想根据df$A的每个唯一值对df进行子集,操作该数据,将其保存为一个新的df,然后最终将生成的1000个新的df连接(rbind)成一个单独的df 我当前的单次迭代代码(无循环)如下所示: dfA = 1 dfA_1 <- subset(df, A == dfA) :: some ddply commands on dfA_1 altering its length and content :: d

我试图迭代地循环遍历R df的子集,但遇到了一些问题。df$A包含0-1000之间的值。我想根据df$A的每个唯一值对df进行子集,操作该数据,将其保存为一个新的df,然后最终将生成的1000个新的df连接(rbind)成一个单独的df

我当前的单次迭代代码(无循环)如下所示:

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

dfA_1您真的应该为此使用dplyr包。您想做的事情可能采用以下形式:

library(dplyr)
df %>%
  group_by(A) %>%
  summarize( . . . ) 
它将更容易做,更容易阅读,更不容易出错,速度更快


dplyr
答案既漂亮又现代,但即使是常规的
plyr
也取代了循环和应用的需要。如果您正在对
A
的每个级别执行某些操作,那么您就可以
ddply(df,.variables=“A”,…)
。不需要在循环中进行子集设置或任何类似的无意义操作。在base R中,您可以执行类似于
do.call的操作(rbind,lappy(split(df,df$A),function(sub.df){…})
。你说的“改变它的长度和内容”是什么意思?目前,我一直在使用ddply计算某些值集的nrow,但由于并非所有子集都包含所有值,因此我将结果附加到固定长度的骨架df。我已经为上面的问题添加了更多信息…如果不清楚,请告诉我。