我想跨同一資料幀的多個塊計算元素方式。我的input表看起來像這樣,它由 3 (3x3) 個塊組成,每個塊都有一個對角線:
input = data.frame(
var1 = c(1,7,4,1,2,9,1,8,3),
var2 = c(3,1,9,4,1,8,3,1,8),
var3 = c(3,9,1,6,8,1,3,5,1) )
該output表應為 3x3,包括位于其塊中相似位置的元素的平均值。例如,表格的第一行output應該是c(1, 3.3, 4). 知道如何巧妙地編碼嗎?謝謝你。
uj5u.com熱心網友回復:
do.call(rbind, lapply(split(input, 1:3), colMeans))
var1 var2 var3
1 1.000000 3.333333 4.000000
2 5.666667 1.000000 7.333333
3 5.333333 8.333333 1.000000
uj5u.com熱心網友回復:
你可以使用tapply甚至aggregate
tapply(unlist(input), list((row(input)-1)%%3,col(input)), mean)
1 2 3
0 1.000000 3.333333 4.000000
1 5.666667 1.000000 7.333333
2 5.333333 8.333333 1.000000
aggregate(.~id, cbind(id=rep(1:3,3),input),mean)
id var1 var2 var3
1 1 1.000000 3.333333 4.000000
2 2 5.666667 1.000000 7.333333
3 3 5.333333 8.333333 1.000000
uj5u.com熱心網友回復:
如果每個塊的維度相同,那么我們也可以使用array路由
t(apply(array(as.matrix(input), c(3, 3, 3)), 1, colMeans))
-輸出
[,1] [,2] [,3]
[1,] 1.000000 3.333333 4.000000
[2,] 5.666667 1.000000 7.333333
[3,] 5.333333 8.333333 1.000000
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521659.html
