计算 R 中无序向量组的平均值
Calculate the mean of groups of an unordered vector in R
我的问题可能很简单!
我有一个无序变量。
我想将这个变量分成 k 个大小相等的组,然后计算每组值的平均值。
vec = c(1:10,1:5,2:6)
mean(vec[1:4])
mean(vec[5:8])
mean(vec[9:12])
mean(vec[13:16])
mean(vec[17:20])
在此先感谢您的帮助!
vec = c(1:10,1:5,2:6)
# get quartiles, quantiles, or any prob
q <- quantile(vec, c(0.25,.5,.75, 1) )
# get the means
lapply(q, function(x){mean(vec[vec<=x])})
$`25%`
[1] 1.6
$`50%`
[1] 2.636364
$`75%`
[1] 3.5
$`100%`
[1] 4.5
多亏了这个,我找到了解决办法
vec = c(1:10,1:5,2:6)
aa= split(vec, floor(5 * seq.int(0, length(vec) - 1) / length(vec)))
lapply(aa, mean)
# To be compared:
mean(vec[1:4])
mean(vec[5:8])
mean(vec[9:12])
mean(vec[13:16])
mean(vec[17:20])
分成5份:
lapply(split(vec, sort(vec%%5)), mean)
$`0`
[1] 2.5
$`1`
[1] 6.5
$`2`
[1] 5.5
$`3`
[1] 3.5
$`4`
[1] 4.5
另一种方法是使用 aggregate
vec <- c(1:10,1:5,2:6)
mystep <- 4
bins <- rep(1:ceiling(length(vec)/mystep), each = mystep)
bins <- bins[1:length(vec)] # removes any "overflow" values due to ceiling
xy <- data.frame(vec, bins)
aggregate(vec ~ bins, data = xy, FUN = mean)
bins vec
1 1 2.5
2 2 6.5
3 3 5.5
4 4 3.5
5 5 4.5
我的问题可能很简单!
我有一个无序变量。 我想将这个变量分成 k 个大小相等的组,然后计算每组值的平均值。
vec = c(1:10,1:5,2:6)
mean(vec[1:4])
mean(vec[5:8])
mean(vec[9:12])
mean(vec[13:16])
mean(vec[17:20])
在此先感谢您的帮助!
vec = c(1:10,1:5,2:6)
# get quartiles, quantiles, or any prob
q <- quantile(vec, c(0.25,.5,.75, 1) )
# get the means
lapply(q, function(x){mean(vec[vec<=x])})
$`25%`
[1] 1.6
$`50%`
[1] 2.636364
$`75%`
[1] 3.5
$`100%`
[1] 4.5
多亏了这个
vec = c(1:10,1:5,2:6)
aa= split(vec, floor(5 * seq.int(0, length(vec) - 1) / length(vec)))
lapply(aa, mean)
# To be compared:
mean(vec[1:4])
mean(vec[5:8])
mean(vec[9:12])
mean(vec[13:16])
mean(vec[17:20])
分成5份:
lapply(split(vec, sort(vec%%5)), mean)
$`0`
[1] 2.5
$`1`
[1] 6.5
$`2`
[1] 5.5
$`3`
[1] 3.5
$`4`
[1] 4.5
另一种方法是使用 aggregate
vec <- c(1:10,1:5,2:6)
mystep <- 4
bins <- rep(1:ceiling(length(vec)/mystep), each = mystep)
bins <- bins[1:length(vec)] # removes any "overflow" values due to ceiling
xy <- data.frame(vec, bins)
aggregate(vec ~ bins, data = xy, FUN = mean)
bins vec
1 1 2.5
2 2 6.5
3 3 5.5
4 4 3.5
5 5 4.5