我在R中有一个包含5列的大数据框。第1列包含0-200的数字列表。第二列包含要加权的数字列表,第三列包含第二列中项目的权重。我的问题是我想将第1列分成几部分:(0,50),(50,100),(100,150)和(150,200)然后找到每个间隔中数据的加权平均值。
我可以先将数据分成这些间隔,然后创建一个新的数据帧,然后计算每个新数据帧中第2和第3列向量的加权平均值,但这需要我通过数据四时间和数据框一样大,我的工作效率太低了。此外,对于未来的功能,我需要更多的间隔,因此需要更长的时间。
有没有办法在一次贯穿中将其分开?
答案 0 :(得分: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
,您似乎不想包含该号码。