使用循环迭代在ddply中动态更新数据框名称?

时间:2014-09-19 18:26:28

标签: r plyr

我想在循环中使用ddply,但需要根据循环迭代更改数据名称,例如:

迭代1:ddply(df1, ... 迭代2:ddply(df2, ... 迭代3:ddply(df3, ...

我尝试使用类似paste0("df",j)之类的东西代替数据名称,但这样做不起作用。我也试过了

data <- paste0("df",j)
ddply(data, ...

但这也不起作用。有谁知道这是否可能?另外,对于没有准备一个工作示例的道歉,我实际上正在处理存储在列表中的数据帧,这将构成一个复杂的例子。但是,如果有必要,我可以尝试将其提炼成一个工作示例。

1 个答案:

答案 0 :(得分:1)

如果你在评论中有一个列表dfs,包含df1 df2等,那么我想你可以做点什么

sapply(dfs,function(d) ddply(d,...))

确切的应用取决于您的确切用法。

您可能希望在此使用lapply,因为它似乎提供了更好的结果格式:

> dfx1 <- data.frame(
+   group = c(rep('A', 6), rep('B', 14), rep('C', 9)),
+   sex = sample(c("M", "F"), size = 29, replace = TRUE),
+   age = runif(n = 29, min = 18, max = 54)
+ )
> 
> dfx2 <- data.frame(
+   group = c(rep('A', 6), rep('B', 14), rep('C', 9)),
+   sex = sample(c("M", "F"), size = 29, replace = TRUE),
+   age = runif(n = 29, min = 18, max = 54)
+ )
> 
> dfs <- list(dfx1,dfx2)
> 
> v <- lapply(dfs,function(d) ddply(d,.(group,sex),summarize,agemean=mean(age)))
> v
[[1]]
  group sex  agemean
1     A   F 26.76541
2     A   M 29.16023
3     B   F 37.63099
4     B   M 39.92033
5     C   F 35.24655
6     C   M 37.86241

[[2]]
  group sex  agemean
1     A   F 36.68879
2     A   M 36.55951
3     B   F 40.56872
4     B   M 37.60044
5     C   F 33.41869
6     C   M 42.35216

>