Вычислить среднее значение групп неупорядоченного вектора в R - PullRequest
0 голосов
/ 28 апреля 2020

Мой вопрос может быть очень простым!

У меня есть неупорядоченная переменная. Я хотел бы разрезать эту переменную на 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])

Заранее спасибо за вашу помощь!

Ответы [ 4 ]

1 голос
/ 28 апреля 2020

Другой способ будет использовать 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
1 голос
/ 28 апреля 2020

Разделить на 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
0 голосов
/ 28 апреля 2020

Благодаря этому ответу я нашел решение

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])
0 голосов
/ 28 апреля 2020
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...