【发布时间】:2017-08-14 23:16:55
【问题描述】:
这很难描述(因此标题模糊),所以我将只提供一些我想要的示例数据。我有两个数据框
set.seed(5)
df = data.frame(ID = sort(rep(c("2006_01", "2006_02", "2006_03", "2006_04"), length.out = 100)),
increment = rep(seq(from = 1, to = 25, by = 1), length.out = 100),
Var1 = rnorm(100))
和
set.seed(23)
df2 = data.frame(ID = sort(rep(c("2006_01", "2006_02", "2006_03", "2006_04"), length.out = 200)),
distance = rep(seq(from = 1, to = 50, by = 1), length.out = 200),
Var2 = rnorm(200))
它们本质上都是横断面,$increment 和 $distance 是测量沿横断面进行测量的距离。较长的一个具有两倍的测量值,因为它具有更高的分辨率,但它代表相同的样带。我想根据横断面的距离比例加入他们。我使用以下代码计算了每个比例列:
df = ddply(df, "ID", transform, proportion = increment/max(increment))
和
df2 = ddply(df2, "ID", transform, proportion = distance/max(distance))
我想要的输出是加入两个数据帧(保持Var1 和Var2)。因为df2的分辨率更高,所以将它加入df的唯一方法是对它进行bin,但是我的真实数据不像样本数据那样规则,所以我需要根据proportion列动态bin这样它就可以计算df2 中位于df 中每组比例值之间的比例值的平均值
为了尝试和总结,我试图通过计算属于较低分辨率集分辨率的所有点的较高分辨率数据集的平均值来加入具有不同分辨率的数据集。
-编辑以尝试添加所需的输出-
输出数据帧的前几行如下所示:
ID increment Var1 Var2
2006_001 1 -0.84085548 -0.1207349
2006_001 2 1.38435934 1.353328
2006_001 3 -1.25549186 1.052048
2006_001 4 0.07014277 0.3705596
【问题讨论】:
-
如果除了结构良好的样本数据之外,您还提供了一些预期的输出,那将会有所帮助。为此,我建议您调用
set.seed,以便我们可以拥有相同随机数据,并且您可以列出所需输出的顶部(或中间或底部)几行。 -
@r2evans 更新了建议的信息。
-
更好,谢谢。在浮点字段 (R FAQ 7.31) 上加入/合并可能会有问题。这是否足够可靠,您可以(例如)
as.integer(100*distance/max(distance))(increment相同)并寻找相同的整数?或者您应该告诉我们您的垃圾箱是如何构造的。
标签: r