我有一个数据帧/列表,它给出了ID和一个数字
1. 25
2. 36
3. 10
4. 18
5. 12第一个列表实际上是一个对象列表,其中包含了每个示例中包含的对象数量。砖块在一堵墙里,所以一张或一张墙上写着每块砖的数量。第二个包含上面列表中所引用的对象的完整列表,以及每个对象的第二个属性。
1. 3
2. 4
3. 2
4. 8
5. 5等等,在弱例子中,我把它们串在一起,这是所有墙壁上每块砖的重量清单。
所以我的第一个列表给出了我想在第二个列表中平均的范围,或者作为最终结果,我想要一个墙的列表,每个墙的平均重量。
ie平均属性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是否有办法这样做,或谁有一个更优雅的解决方案。
发布于 2017-04-25 18:42:58
你可以这样做..。设置范围的低限值和高限值,然后使用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.454545https://stackoverflow.com/questions/43618224
复制相似问题