如何连接使用plyr函数拆分的数据框列表

时间:2015-07-07 01:29:39

标签: r plyr

我使用了 plyr 包提供的 strip_splits(df)功能来获取数据框列表。我现在想要将数据框列表加在一起,并添加回用于拆分它们的变量。下面突出显示的文档让我相信这应该是可能的,但我找不到合适的功能。

  

当您想对数据框中的每一列执行某些操作时,除了用于拆分的变量之外,这非常有用。将所有结果组合在一起时,这些变量将自动重新添加到结果中。

示例:

dfSplit <- dlply(mtcars, c("vs", "am"), strip_splits)
df <- dfSplit[[1]]
score <- function(df) {
  df$score <- apply(apply(df, 2, scale), 1, mean, na.rm = TRUE)
  return(df)
}
dfSplit <- lapply(dfSplit, score) 

如何再次将 dfSplit 列表中的数据框组合在一起?

编辑:组合数据框应包含 vs am

3 个答案:

答案 0 :(得分:3)

使用bind_rows()中的dplyr

library(dplyr)
bind_rows(dfSplit)

或使用基础R:

do.call(rbind, dfSplit)

给出了:

#Source: local data frame [32 x 10]
#
#    mpg cyl  disp  hp drat    wt  qsec gear carb       score
#1  18.7   8 360.0 175 3.15 3.440 17.02    3    2 -0.18850120
#2  14.3   8 360.0 245 3.21 3.570 15.84    3    4  0.05315376
#3  16.4   8 275.8 180 3.07 4.070 17.40    3    3 -0.15909455
#4  17.3   8 275.8 180 3.07 3.730 17.60    3    3 -0.14033030
#5  15.2   8 275.8 180 3.07 3.780 18.00    3    3 -0.16788329
#6  10.4   8 472.0 205 2.93 5.250 17.98    3    4  0.42384103
#7  10.4   8 460.0 215 3.00 5.424 17.82    3    4  0.49006288
#8  14.7   8 440.0 230 3.23 5.345 17.42    3    4  0.79264565
#9  15.5   8 318.0 150 2.76 3.520 16.87    3    2 -0.79767163
#10 15.2   8 304.0 150 3.15 3.435 17.30    3    2 -0.53819495
#..  ... ...   ... ...  ...   ...   ...  ...  ...         ...

答案 1 :(得分:3)

您还可以使用rbindlist包中的data.table

library(data.table)
rbindlist(dfSplit)

答案 2 :(得分:0)

我已经找到了plyr函数ldply,它给出了

.id  mpg cyl  disp  hp drat    wt  qsec gear carb       score
1  0.0 18.7   8 360.0 175 3.15 3.440 17.02    3    2 -0.18850120
2  0.0 14.3   8 360.0 245 3.21 3.570 15.84    3    4  0.05315376
3  0.0 16.4   8 275.8 180 3.07 4.070 17.40    3    3 -0.15909455
4  0.0 17.3   8 275.8 180 3.07 3.730 17.60    3    3 -0.14033030
5  0.0 15.2   8 275.8 180 3.07 3.780 18.00    3    3 -0.16788329

然而,文档让我相信应该有一个函数给数据框提供列vs和am(而不是.id)