0

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

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

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

4

1 回答 1

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])
})

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

于 2013-07-08T13:45:34.547 回答