2016-03-17 2 views
-3

В R, у меня есть список из 10 элементов, таких как:как средние группы элементов в списке в R?

n <- c(5,5,5,5,5,6,6,6,6,6) 

Я хочу, чтобы создать еще один список, который будет иметь 2 элементов, где каждый элемент будет в среднем 5-элементов в предыдущем списке. Таким образом, другой список должен выглядеть следующим образом:

5,6 

Есть ли быстрый способ сделать это в R? То, что я хочу, это список, который дает мне среднее значение первого элемента X, среднее значение второго элемента X и т. Д. В примере исходный список содержит 10 элементов, и я хочу сгруппировать их по 5. Поэтому я пытаюсь вычислить список, где первым элементом является среднее из первых 5 элементов, а второй элемент - среднее из последних 5 элементов.

+4

так что это должно быть 10 элементов или 2? – rawr

+0

'ave (x, (seq_along (x) -1)% /% 5)' может быть? – thelatemail

ответ

2

Как вы уже упоминали, ваш первоначальный список насчитывает 500 имен. Вот подход:

x <- runif(500) 
list_x <- split(x, ceiling(seq_along(x)/50)) 

# find the mean in each group of 50 
colMeans(as.data.frame(list_x)) 

10 элементов:

y <- c(rep(5, 5), rep(6, 5)) 

list_y <- split(y, ceiling(seq_along(y)/5)) 
colMeans(as.data.frame(list_y)) 
+0

ну, на самом деле у меня есть 500 элементов, и я хочу рассчитать среднее значение каждого из 50 элементов. – wthimdh

+0

Я отредактировал свой ответ. –

+0

Для получения следующего списка: [1] 5 5 5 5 5 6 6 6 6 6, это дает мне [1] 5.5 5.5 5.5 5.5 5.5, но я хочу (1) 5 6 Первый элемент - это среднее значение первые 5 элементов, второе - среднее из последних 5 элементов. – wthimdh

3

Отдайте свой вектор значений

x = rnorm(50 * 10) 

в матрицу и взять колонку означает

colMeans(matrix(x, 50)) 

Подробнее как правило, создать вектор, который описывает, как данные должны быть разделены

f = rep(seq_len(10), each=50) 

split() ваших данных, lapply() функции для каждой группы, и объединить (unlist() в данном случае) результаты

unlist(lapply(split(x, f), mean)) 

ли это в два (например, sapply(split(x, f), mean)) или один (например, tapply(), by(), ave()) шаги.

+0

это дает мне неправильный ответ: s – wthimdh

+0

@wthimdh - Тогда, возможно, вы должны уточнить вопрос. Непонятно, что вы пытаетесь выполнить (по крайней мере, четыре человека, которые проголосовали за закрытие этого вопроса). –

+1

@wthimdh для вашего примера, это будет 'colMeans (matrix (x, ncol = length (x)/5))', так как вам нужны куски 5 – rawr

Смежные вопросы