如何将x,y,z向量分成矩阵(R)

时间:2014-07-19 12:26:37

标签: r binning

这可能是一个基本问题,但在尝试了几天之后,我无法向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值的矩阵,其中行表示binned y值,列表示binned 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 

感谢

1 个答案:

答案 0 :(得分: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功能将xy拆分为您喜欢的群组。虽然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