2014-02-16 3 views
35

R 스튜디오에서 작업 중입니다. 데이터 프레임의 각 열에 대한 평균을 계산해야합니다. 행렬의 각 열에 대한 평균을 계산합니다.

cluster1 // 5 by 4 data frame 
mean(cluster1) // 

내가 가지고 :

Warning message: 
    In mean.default(cluster1) : 
    argument is not numeric or logical: returning NA 

하지만 첫 번째 열의 평균을 얻기 위해

mean(cluster1[[1]]) 

를 사용할 수 있습니다.

모든 열에 대한 평균값을 얻는 방법은 무엇입니까?

도움을 주시면 감사하겠습니다.

+2

를 사용하여 데이터 프레임으로 작동 하나에 벡터 기능을 변환하기 질문을 게시하기 전에 답변을 찾으십시오. '열의 의미'에 대한 빠른 [웹 검색] (https://www.google.com.au/search?q=r+column+means&oq=r+column+means)은 매우 관련성이 높은 첫 번째 조회수를 산출합니다. 다른 유용한자가 진단 툴에는 빌트인 ['apropos'] (http://stat.ethz.ch/R-manual/R-patched/library/utils/html/apropos.html) (예를 들어'apropos 'mean')')과''findFn' (http://www.inside-r.org/packages/cran/sos/docs/findFn)을'sos' 패키지에 포함하고 있습니다. – jbaums

+0

[이 훌륭한 참고 카드] (http://cran.r-project.org/doc/contrib/Baggott-refcard-v2.pdf). – jbaums

답변

41

당신은 colMeans 사용할 수 있습니다

### Sample data 
set.seed(1) 
m <- data.frame(matrix(sample(100, 20, replace = TRUE), ncol = 4)) 

### Your error 
mean(m) 
# [1] NA 
# Warning message: 
# In mean.default(m) : argument is not numeric or logical: returning NA 

### The result using `colMeans` 
colMeans(m) 
# X1 X2 X3 X4 
# 47.0 64.4 44.8 67.8 
+0

'중앙값'또는 '최소', '최대'를 계산하려면 어떻게해야합니까? 우리는'colMedians'과 같은 것을 가지고 있습니까? – AnhTriet

+0

@AnhTriet, 아마도 ""matrixStats "패키지 (https://cran.r-project.org/web/packages/matrixStats/index.html)를 고려해보십시오. – A5C1D2H2I1M1N2O1R2T1

+0

감사합니다. 데이터 프레임을 사용하여 작업 할 수 있습니까? – AnhTriet

19
당신은 함수 나 매트릭스 또는 수치 데이터 프레임의 행이나 열 실행 '적용'을 사용할 수 있습니다

:

cluster1 <- data.frame(a=1:5, b=11:15, c=21:25, d=31:35) 

apply(cluster1,2,mean) # applies function 'mean' to 2nd dimension (columns) 

apply(cluster1,1,mean) # applies function to 1st dimension (rows) 

sapply(cluster1, mean) # also takes mean of columns, treating data frame like list of vectors 
+0

'colMeans (m)'과'rowMeans (m)'을 대신 사용하면 더 좋습니다. 최적화되고'apply (cluster1,1, mean)'보다 빠릅니다. – Rentrop

4

또 다른 방법은하는 것입니다 사용 purrr 패키지

# example data like what is said above 
sapply(data, mean, na.rm = T)  # Returns a vector (with names) 
lapply(data, mean, na.rm = T)  # Returns a list 

"의미"숫자 데이터를 필요로 기억 :@A 손수레 그리고 경우 모헤어

set.seed(1) 
m <- data.frame(matrix(sample(100, 20, replace = TRUE), ncol = 4)) 


library(purrr) 
means <- map_dbl(m, mean) 

> means 
# X1 X2 X3 X4 
#47.0 64.4 44.8 67.8 
3

당신은 NA의가 있습니다. 당신은 클래스 데이터를 혼합 한 경우, 사용

numdata<-data[sapply(data, is.numeric)] 
sapply(numdata, mean, na.rm = T) # Returns a vector 
lapply(numdata, mean, na.rm = T) # Returns a list 
0

다양성의 경우 :을 또 다른 방법입니다보십시오 plyr::colwise()

set.seed(1) 
m <- data.frame(matrix(sample(100, 20, replace = TRUE), ncol = 4)) 

plyr::colwise(mean)(m) 


# X1 X2 X3 X4 
# 1 47 64.4 44.8 67.8 
관련 문제