2013-02-25 2 views
1

Я относительно новичок в R и имею сложную ситуацию для решения. Я загрузил список из более чем 1000 кадров данных в R и назвал этот список x. То, что я хочу сделать, это взять определенные кадры данных и принять среднее значение и дисперсию всех кадров данных (за исключением первого столбца каждого) и сохранить их в два отдельных вектора. Например, я хочу взять среднее и дисперсию каждого третьего кадра данных в списке, начиная с элемента (3) и перейти к элементу (54).Средства из списка фреймов данных в R

Так что я в конечном счете хочу два вектора:

meanvector=c(mean(data frame(3)), mean(data frame(6)),..., mean(data frame(54))) 
variancevector=c(var(data frame (3)), var(data frame (6)), ..., var(data frame(54))) 

Эта проблема является способ выше моего уровня знаний, но я имею в виду, что я могу сделать это эффективно, используя какую-то петлю, но я не знаю, как идти о создании такой петли. Любая помощь приветствуется! Заранее спасибо.

+0

, когда вы имеете в виду 'весь data.frame за исключением первого column', вы имеете в виду' средства всех других столбцов separately' (или) 'одно среднее значение всего кадра данных с удаленным первым столбцом?? – Arun

+0

Я имел в виду одно среднее значение целого data.frame с удаленным первым столбцом. – user1836894

+0

Хорошо, тогда я понял это правильно. Мой ответ должен работать. – Arun

ответ

3

Вы можете использовать lapply и передать индексы следующим образом:

ids <- seq(3, 54, by=3) 
out <- do.call(rbind, lapply(ids, function(idx) { 
    t <- unlist(x[[idx]][, -1]) 
    c(mean(t), var(t)) 
})) 
+0

Отлично! Спасибо, это сделано именно то, что я хотел. – user1836894

1

Если x - это список из 1000 фреймов данных, вы можете использовать lapply для возврата средств и отклонений подмножества этого списка.

ix = seq(1, 1000, 3) 
lapply(x[ix], function(df){ 
    #exclude the first column 
    c(mean(df[,-1]), var(df[,-1])) 
}) 
+0

Я не уверен, что вы можете взять среднее значение 'df' непосредственно без предупреждения .. И это берет средства для каждого столбца, а не для всего' data.frame' (iiuc). – Arun

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