【发布时间】:2016-04-11 03:34:54
【问题描述】:
我有一组数据如下:
数据集 1
z x v y d p
19.88000 8.06411 5.46210 1.26122 1000000.000 13.484
20.13000 8.23777 5.71589 1.26241 1000000.000 13.774
20.38000 8.38748 5.98116 1.26355 1000000.000 14.024
20.63000 8.54422 6.24602 1.26465 1000000.000 14.286
20.88000 8.70251 6.51180 1.26571 1000000.000 14.551
数据集2
z x v y d p
19.13000 7.27788 4.79292 1.16700 1000000.000 11.639
19.38000 7.45097 5.05959 1.16845 1000000.000 11.915
19.63000 7.60064 5.34092 1.16984 1000000.000 12.155
20.88000 8.33493 7.09921 1.17608 1000000.000 13.329
21.00500 8.39859 7.22789 1.17665 1000000.000 14.151
我从几个 .txt 文件中读取数据并将它们组合起来,得到一个包含 z 值的向量(第一列)和另一个包含 x 值的向量(第二列)。但我有几个。首先,我考虑平均不同的 z 和 x 向量。但不幸的是,z 值的间距不相等(这意味着在一个数据集中,z 向量像 19.88、20.13、20.38 等等。但是在另一个数据集中,z 像 19.54、20.22、20.87 等等......)所以我需要一种为向量 z 创建等距 bin 的方法。
换句话说,我有多个 z 值向量,我想创建另一个向量,它像 19.0、19.5、20.0、20.5 ....在 0.5 的 bin 中,我想平均 z 向量中的值和对相应的 x 向量执行相同的操作。我想要的如下:
z x
19.00 7.36
19.50 7.83
20.00 8.31
20.50 8.53
21.00 8.39
这里,7.36 是 7.27788 和 7.45097 的平均值,因为它们的 z 值介于 19.00 和 19.50 之间。同样,7.83 是 7.60064 和 8.06411 的平均值,因为它们的 z 值介于 19.50 和 20.00 之间等等。
在 R 中有一个聪明的方法来做到这一点吗? 因为我的数据集长度不同,我不想写一个 for 循环来检查每个元素。
【问题讨论】:
-
aggregate(c(d1$x, d2$x), list(z = findInterval(c(d1$z, d2$z), seq(19, 22, .5))), mean)或aggregate(c(d1$x, d2$x), list(z = cut(c(d1$z, d2$z), breaks = seq(19, 22, .5))), mean)您可以使用labels=获得更好的标签