这可能是一个基本问题,但在尝试了几天之后,我无法向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
感谢
答案 0 :(得分:2)
您可以在此使用tapply
和cut
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
功能将x
和y
拆分为您喜欢的群组。虽然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