2016-07-17 11 views
2

Я хочу взять среднее значение для каждой строки в разных кадрах данных. Кто-нибудь знает более умный способ сделать это, используя заявления о применении? Извините за стену кода.Способ сделать это с помощью приложения?

Для каждого файла hiXXXX вам понадобится вектор 1000: 1006, а затем вектор 2:13 для столбцов. Я использовал mapply для чего-то странного, как это раньше, так что, возможно, это могло бы сделать это как-то?

for (i in 1:nrow(subavg)) { 
    subavg[i,c(2)] <- mean(c(hi1000[i,c(2)],hi1001[i,c(2)],hi1002[i,c(2)],hi1003[i,c(2)],hi1004[i,c(2)],hi1005[i,c(2)],hi1006[i,c(2)])) 
    subavg[i,c(3)] <- mean(c(hi1000[i,c(3)],hi1001[i,c(3)],hi1002[i,c(3)],hi1003[i,c(3)],hi1004[i,c(3)],hi1005[i,c(3)],hi1006[i,c(3)])) 
    subavg[i,c(4)] <- mean(c(hi1000[i,c(4)],hi1001[i,c(4)],hi1002[i,c(4)],hi1003[i,c(4)],hi1004[i,c(4)],hi1005[i,c(4)],hi1006[i,c(4)])) 
    subavg[i,c(5)] <- mean(c(hi1000[i,c(5)],hi1001[i,c(5)],hi1002[i,c(5)],hi1003[i,c(5)],hi1004[i,c(5)],hi1005[i,c(5)],hi1006[i,c(5)])) 
    subavg[i,c(6)] <- mean(c(hi1000[i,c(6)],hi1001[i,c(6)],hi1002[i,c(6)],hi1003[i,c(6)],hi1004[i,c(6)],hi1005[i,c(6)],hi1006[i,c(6)])) 
    subavg[i,c(7)] <- mean(c(hi1000[i,c(7)],hi1001[i,c(7)],hi1002[i,c(7)],hi1003[i,c(7)],hi1004[i,c(7)],hi1005[i,c(7)],hi1006[i,c(7)])) 
    subavg[i,c(8)] <- mean(c(hi1000[i,c(8)],hi1001[i,c(8)],hi1002[i,c(8)],hi1003[i,c(8)],hi1004[i,c(8)],hi1005[i,c(8)],hi1006[i,c(8)])) 
    subavg[i,c(9)] <- mean(c(hi1000[i,c(9)],hi1001[i,c(9)],hi1002[i,c(9)],hi1003[i,c(9)],hi1004[i,c(9)],hi1005[i,c(9)],hi1006[i,c(9)])) 
    subavg[i,c(10)] <- mean(c(hi1000[i,c(10)],hi1001[i,c(10)],hi1002[i,c(10)],hi1003[i,c(10)],hi1004[i,c(10)],hi1005[i,c(10)],hi1006[i,c(10)])) 
    subavg[i,c(11)] <- mean(c(hi1000[i,c(11)],hi1001[i,c(11)],hi1002[i,c(11)],hi1003[i,c(11)],hi1004[i,c(11)],hi1005[i,c(11)],hi1006[i,c(11)])) 
    subavg[i,c(12)] <- mean(c(hi1000[i,c(12)],hi1001[i,c(12)],hi1002[i,c(12)],hi1003[i,c(12)],hi1004[i,c(12)],hi1005[i,c(12)],hi1006[i,c(12)])) 
    subavg[i,c(13)] <- mean(c(hi1000[i,c(13)],hi1001[i,c(13)],hi1002[i,c(13)],hi1003[i,c(13)],hi1004[i,c(13)],hi1005[i,c(13)],hi1006[i,c(13)])) 
} 
+0

Благодарим вас за редактирование моей стены кода. – Stephen

ответ

4

Поскольку существует только 7 наборов данных, мы можем использовать в качестве аргументов для Map, то cbind, и получить rowMeans

Map(function(...) rowMeans(cbind(...)), hi1000, hi1001, hi1002, hi1003, 
        hi1004, hi1005, hi1006) 

Или использовать + с Reduce после получения наборов данных в list а затем делить на общее количество наборов данных, т.е. 7

Reduce(`+`, mget(paste0("hi", 1000:1006)))/7 

Второе решение более компактно, но если у нас есть NA в наборе данных, лучше использовать первый, так как rowMeans имеет аргумент na.rm. По умолчанию это FALSE, но мы можем установить его на TRUE.

+1

, что второй невероятно быстрый ... ничего себе! – Stephen

+1

'Уменьшить' решение очень приятно. невозможно дать двойной голос :-) – 989