Сводные таблицы данных из широких data.frames

Я пытаюсь найти ленивые / простые способы создания сводных таблиц /data.frames из широкогоdata.frames, Предположим следующий data.frame, но с большим количеством столбцов, поэтому указание имен столбцов занимает много времени:

set.seed(2)
x <- data.frame(Rep = rep(1:3, 4), Temp = c(rep(10,6), rep(20,6)), 
pH = rep(c(rep(8.1, 3), rep(7.6, 3)), 2),
Var1 = rnorm(12, 5,2), Var2 = c(rnorm(6,4,1), rnorm(6,3,5)),
Var3 = rt(12, 20))
x[1:3] <- as.data.frame(apply(x[1:3], 2, function(x) as.factor(x)))

Теперь я могу рассчитать сводную статистику сplyr:

(mu <- ddply(x, .(Temp, pH), numcolwise(mean)))
(std <- ddply(x, .(Temp, pH), numcolwise(sd)))
(n  <- ddply(x, .(Temp, pH), numcolwise(length)))

Но я не могу понять, как применять все эти функции одновременно:

ddply(x, .(Temp, pH), numcolwise(mean, sd, length))

Конечно, я мог бы объединить различные итоговые таблицы data.tables, но это не был бы «ленивый / легкий» способ сделать это. Я ищу что-то общее, что я мог бы применить во многих случаях. Примерно так, за исключением того, что можно создать с помощью одной функции:

xx <- merge(mu, std, by = c("Temp", "pH"), sotr = F)
colnames(xx) <- gsub("x", "mean", colnames(xx))
colnames(xx) <- gsub("y", "sd", colnames(xx))
xx <- merge(xx, n, by = c("Temp", "pH"), sotr = F)
colnames(xx)[(ncol(xx)-2):ncol(xx)] <-
paste0(colnames(xx)[(ncol(xx)-2):ncol(xx)], ".length")
xx <- xx[c("Temp", "pH", grep("Var1", colnames(xx), value = T),
grep("Var2", colnames(xx), value = T),
grep("Var3", colnames(xx), value = T))]
xx

  Temp  pH Var1.mean  Var1.sd Var1.length Var2.mean  Var2.sd Var2.length Var3.mean  Var3.sd Var3.length
1   10 7.6  4.281195 1.352194           3  3.534447 1.652884           3 0.1529616 1.076276           3
2   10 8.1  5.583853 2.491672           3  4.116622 1.478286           3 1.1611944 1.081301           3
3   20 7.6  5.840411 1.120549           3  6.907273 8.628021           3 0.1301949 1.764201           3
4   20 8.1  6.635154 2.232262           3  8.893188 4.208087           3 0.5509202 1.187431           3

Можно ли это сделать вR В настоящее время? Любой совет будет принята с благодарностью.

Ответы на вопрос(2)

Ваш ответ на вопрос