2016-07-17 5 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 데이터 세트가, 우리는 cbind에게 다음 Map에 대한 인수로 그것을 사용하고 rowMeans

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

을 가져 오거나 list의 데이터 세트를받은 후 Reduce+을 사용할 수 있습니다 총 데이터 수로 나누십시오. 즉, 7

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

두 번째 솔루션은 좀 더 작지만 데이터 세트에 NA가있는 경우 rowMeansna.rm 인수가있는 첫 번째 솔루션을 사용하는 것이 좋습니다. 기본적으로는 FALSE이지만, TRUE으로 설정할 수 있습니다.

+1

그 두 번째 것은 믿을 수 없을 정도로 빠릅니다 ... 와우! – Stephen

+1

'Reduce' 솔루션은 매우 좋습니다. 이중 투표를하는 것은 불가능합니다 :-) – 989

관련 문제