我使用了 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
列答案 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)