1

这可能是一个基本问题,但经过几天的尝试,我无法在 Google 上搜索到任何有用的信息。

我有一个带有 x,y,z 元组的 R 数据框,其中 z 是对 x 和 y 的响应,可以建模为表面。

> head(temp)
         x         y        z
1 36.55411  965.7779 1644.779
2 42.36912  978.9721 1643.957
3 58.34699 1183.7426 1846.123
4 53.55439 1232.2696 1990.707
5 50.76167 1115.2049 1281.988
6 51.37299 1059.9088 1597.028

我想创建一个平均 z 值矩阵,其中行表示合并的 y 值,列表示合并的 x 值,例如

            0<x<40    40<x<60  60<x<80   x>80
    0<y<800 1000.0    1100.00  1100.00   1000.0 
 800<y<1200 1000.0    1200.00  1200.00   1000.0 
1200<y<1400 1000.0    1200.00  1200.00   1000.0
     y<1400 1000.0    1100.00  1100.00   1000.0 

谢谢

4

1 回答 1

2

你可以在这里使用tapplycut

with(temp, tapply(z, 
    list(
      y=cut(y, breaks=c(0,800,1200,1400,Inf), include.lowest=T), 
      x=cut(x, breaks=c(0,40,60,80,Inf), include.lowest=T)
    ),
    mean)
)

cut功能分为您喜欢的任何组xyWhile为列表中这些值的每个分组tapply计算此处。mean

#                    x
# y                     (0,40]  (40,60] (60,80] (80,Inf]
#   (0,800]                 NA       NA      NA       NA
#   (800,1.2e+03]     1644.779 1592.274      NA       NA
#   (1.2e+03,1.4e+03]       NA 1990.707      NA       NA
#   (1.4e+03,Inf]           NA       NA      NA       NA
于 2014-07-19T15:38:57.270 回答