2012-12-04 3 views
0

for 루프로 해결할 수없는 간단한 문제가 있습니다. for 루프 내에서 매번 열의 평균을 계산하고 저장합니다.for 루프 내에서 덮어 쓰기 대신 값 추가

첫 번째 루프에서는 평균값이 변수에 저장됩니다. 두 번째 루프에서는 column2의 평균이 column1의 평균을 대체합니다. 이것은 매우 기본적인 질문이지만 어떻게해야할지 모르겠습니다.

#read.table(file1) 
for (x in 1:100){ 
f <- mean(file1[,x]) 
} 

모든 변수의 평균 값을 1 변수에 저장하려고합니다 ("f"라고 가정).

f <- c(meancol1, meancol2, meancol3... meancol100) 

아이디어가 있으십니까?

답변

2

심지어 더 간단하면 colMeans 기능을 사용할 수 있습니다. 여기에 예를

> set.seed(001) # Generating some random data 
> file1 <- data.frame(matrix(rnorm(50, 100, 5), ncol=5)) 
> file1 # this is how the artificial data.frame should look like 
      X1  X2  X3  X4  X5 
1 96.86773 107.55891 104.59489 106.79340 99.17738 
2 100.91822 101.94922 103.91068 99.48606 98.73319 
3 95.82186 96.89380 100.37282 101.93836 103.48482 
4 107.97640 88.92650 90.05324 99.73097 102.78332 
5 101.64754 105.62465 103.09913 93.11470 96.55622 
6 95.89766 99.77533 99.71936 97.92503 96.46252 
7 102.43715 99.91905 99.22102 98.02855 101.82291 
8 103.69162 104.71918 92.64624 99.70343 103.84266 
9 102.87891 104.10611 97.60925 105.50013 99.43827 
10 98.47306 102.96951 102.08971 103.81588 104.40554 
> colMeans(file1) # this part computes the means for each column without a 'for' loop 
     X1  X2  X3  X4  X5 
100.66101 101.24422 99.33163 100.60365 100.67068 

이 아닌 숫자 열이있는 경우, 예를 들어 colMeans 내부 sapply를 사용 autotically을 건너 뛸 수 있습니다 ?colMeans

에서보세요이다 :

set.seed(001) # Generating some random data 
file1 <- data.frame(matrix(rnorm(50, 100, 5), ncol=5)) 
# Creating three columns with non-numeric data 
factors <- data.frame(matrix(sample(letters, 30, TRUE), ncol=3)) 

file1 <- cbind(factors, file1) # this is your data.frame 
colnames(file1) <- paste0('Col.', 1:ncol(file1)) # set some colnames 
file1 # this is the data.frame to work with 
> colMeans(file1[sapply(file1, is.numeric)])# colmeans for only those numeric cols 
    Col.4  Col.5  Col.6  Col.7  Col.8 
100.65027 101.52467 102.04486 99.14944 100.23847 
+0

이제 위대하게 작동하지만 여기에도 약간의 문제가 있습니다. 내 데이터의 처음 3 열은 숫자가 아닙니다. colMeans 함수는 모든 열을 숫자로 간주합니다. 예를 들어 첫 번째 3 개의 colmun을 제외 할 수 있습니까? 또는 숫자로만 이루어진 새로운 파일을 만들 필요가 있습니까? 감사합니다 – Error404

+0

당신은 선생님, 매우 친절합니다 : 모자 : 많은 감사 :) – Error404

0

루프가 필요하지 않습니다.

f<-apply(file1,2,mean) 
+1

또는이 특정 사건에 대한 , 보다 빠른'colMeans' 함수를 사용하십시오. – flodel

+0

이 또한 일했다, 고마워. 그러나, 나는이 페이지에서 우리 친구에게 말했다. 소수의 소수 열은 숫자가 아닙니다. 어떻게 든 그들을 exlcude 수 있습니까? – Error404

+1

예를 들어 처음 세 개의 열이 숫자가 아닌 경우 apply (file1 [, - (1 : 3)], 2, mean)를 쓸 수 있습니다. –

관련 문제