【问题标题】:Referencing different coloumn as ranges between two data frames将不同的列引用为两个数据框之间的范围
【发布时间】:2017-04-25 18:21:19
【问题描述】:

我有一个数据框/列表,给出 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

有没有办法做到这一点,或者有没有人有更优雅的解决方案。

【问题讨论】:

  • 这看起来是一个经过深思熟虑的问题,但它可以使用更好的格式、更清晰的预期输出和更容易复制的示例。请参阅stackoverflow.com/questions/5963269/… 以获得一些指导。

标签: r dataframe


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多