将不同的coloumn引用为两个数据帧之间的范围

时间:2017-04-25 18:21:20

标签: r dataframe

我有一个数据框/列表给出了ID和一个数字

1.  25
2.  36
3.  10
4.  18
5.  12

第一个列表实际上是一个对象列表,其中包含每个对象的数量。墙上的砖块,所以每个砖块的数量都是一个或多个砖块。 我有一个第二个包含上面列表中引用的对象的完整列表,以及每个对象的第二个属性。

1.   3
2.   4
3.   2
4.   8
5.   5

等。  在一个虚弱的例子中,我将它串在一起,这将是所有墙壁中每块砖块重量的列表。

所以我的第一个清单给了我想要在第二个清单中平均的范围,或者我希望最终结果是每个墙壁每块砖的平均重量的墙壁列表。

即平均属性1-25,26-62 ... 89-101

到目前为止,我的想法是创建一个包含两个颜色的数据框

1. 1 25
2. 26 62
3. n
4. n
5. 89 101

然后尝试创建第三列,在mean(table2$coloumn1[x:y])类型公式中使用前两个作为x和y,但我无法正常工作。

最终结果可能看起来像这样

1.   3.2
2.   6.5
3.   3
4.   7.9
5.   8.5

有没有办法像这样做,或者有人有更优雅的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作...设置范围的下限和上限,然后使用mapply计算df2相应行的平均值。

df1 <- data.frame(id=c(1,2,3,4,5),no=c(25,36,10,18,12))
df2 <- data.frame(obj=1:100,att=sample(1:10,100,replace=TRUE))

df1$low <- cumsum(c(1,df1$no[-nrow(df1)]))
df1$high <- pmin(cumsum(df1$no),nrow(df2))
df1$meanatt <- mapply(function(l,h) mean(df2$att[l:h]), df1$low, df1$high)

df1
  id no low high  meanatt
1  1 25   1   25 4.760000
2  2 36  26   61 5.527778
3  3 10  62   71 5.800000
4  4 18  72   89 5.111111
5  5 12  90  100 4.454545