我想在循环中使用ddply,但需要根据循环迭代更改数据名称,例如:
迭代1:ddply(df1, ...
迭代2:ddply(df2, ...
迭代3:ddply(df3, ...
我尝试使用类似paste0("df",j)
之类的东西代替数据名称,但这样做不起作用。我也试过了
data <- paste0("df",j)
ddply(data, ...
但这也不起作用。有谁知道这是否可能?另外,对于没有准备一个工作示例的道歉,我实际上正在处理存储在列表中的数据帧,这将构成一个复杂的例子。但是,如果有必要,我可以尝试将其提炼成一个工作示例。
答案 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
>