【问题标题】:Weighted Average of subsets in RR中子集的加权平均值
【发布时间】:2013-07-08 13:26:15
【问题描述】:

我在 R 中有一个包含 5 列的大型数据框。第一列包含从 0 到 200 的数字列表。第二列包含要加权的数字列表,第三列包含第二列中项目的权重。我的问题是我想将第一列分成几个部分:(0,50]、(50,100]、(100,150] 和 (150,200]),然后找到每个区间中数据的加权平均值。

我可以先将数据单独划分为这些区间,然后创建一个新数据框,然后计算每个新数据框中第 2 列和第 3 列向量的加权平均值,但这需要我遍历数据四时间和数据框与我的数据框一样大,这太低效了。此外,对于未来的功能,我需要更多的间隔,因此需要更长的时间。

有没有什么办法可以把它分成一次运行?

【问题讨论】:

    标签: r


    【解决方案1】:

    试试这样的:

    df <- data.frame(x1 = 0:200, x2=rnorm(201), x3=rnorm(201))
    s <- c(0,rep(1:4, each=50)) # create vector to split by
    dfs <- split(df,s) # split it
    dfs <- dfs[2:5]
    lapply(dfs, function(tmp) {  # apply weighted mean to splits
        weighted.mean(tmp[,2],tmp[,3])
    })
    

    我更新了上面的内容以排除号码0,您似乎不想包括在内。

    【讨论】:

    • 非常感谢!这种方法正是我想要的。
    • 另外,如果你不知道,sort(rep(1:4,50)) 可以这样写:rep(1:4, each=50)
    • @kng 我总是忘记each!已更新。
    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2016-12-14
    相关资源
    最近更新 更多