我想根据两列中的值将大型数据帧拆分为数据帧列表。然后,我想在结果列表中对所有数据帧(滞后变换)应用公共数据转换。我知道split命令,但一次只能处理一列数据。
答案 0 :(得分:51)
您需要将所有要分割的因子放在列表中,例如:
split(mtcars,list(mtcars$cyl,mtcars$gear))
然后你可以使用lapply
来做你想做的其他事情。
如果要避免在结果中使用零行数据帧,则会有一个drop
参数,其默认值与“[”函数中的drop参数相反。
split(mtcars,list(mtcars$cyl,mtcars$gear), drop=TRUE)
答案 1 :(得分:7)
这个怎么样:
library(plyr)
ddply(df, .(category1, category2), summarize, value1 = lag(value1), value2=lag(value2))
似乎是plyr
包和ddply()
函数的优秀工作。如果仍有未解决的问题,请提供一些示例数据。拆分也应该适用于几个列:
df<- data.frame(value=rnorm(100), class1=factor(rep(c('a','b'), each=50)), class2=factor(rep(c('1','2'), 50)))
g <- c(factor(df$class1), factor(df$class2))
split(df$value, g)