我有一个数据框/列表给出了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
有没有办法像这样做,或者有人有更优雅的解决方案。
答案 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