2011-10-26 2 views
2

R에는 실험 데이터를 설명하는 9 개의 명명 된 열이있는 데이터 프레임이 있습니다. 첫 번째 열은 유전자 이름을 포함하고 다음 8 열은 유전자 발현 값을 포함합니다. 궁극적 인 목표는 표현식 값의 표준 편차로 데이터 프레임을 정렬하는 것입니다.특정 열의 표준 편차로 R 데이터 프레임을 정렬하는 방법은 무엇입니까?

기본적으로 2 ~ 9 열의 표준 편차를 계산하고이 값에 따라 전체 데이터 프레임을 정렬하려고합니다. 어떻게해야합니까?

첫 번째 아이디어는 sd() 함수를 사용하여 계산 된 표준 편차와 함께 열 번째 열을 추가 한 다음 테이블을 정렬하고 마지막으로 열 번째 열을 다시 삭제하는 것이 었습니다. 그러나 나는 그것을하는 방법을 이해할 수 없다.

답변

4

키 명령은 apply, order 및 일부 행 재 배열입니다.

##Create some dummy data 
##You should always try and include some test data in your questions 
R> dd = as.data.frame(matrix(rnorm(80), ncol=8)) 
R> dd = cbind(GENE = LETTERS[1:10], dd) 
R> head(dd, 2) 
    GENE V1  V2  V3  V4  V5  V6  V7  V8 
1 A 1.693 1.2977 1.2220 0.4877 -1.7076 1.7796 0.7980 0.08643 
2 B 1.987 0.1545 -0.2173 -0.5959 0.7274 0.2757 -0.5391 0.56054 

##Work out the sd for columns 2 to 9 using apply 
##Use "order" to reorder the rows 
R> dd1 = dd[order(apply(dd[,2:9], 1, sd)),] 
##Check the new order 
R> apply(dd1[,2:9], 1, sd) 
    8  7  5  9  2  1  4  6  10  3 
0.5197 0.7128 0.8149 0.8210 0.8624 0.8808 0.9804 1.2058 1.5086 1.6191 
R> head(dd1, 2) 
    GENE  V1  V2  V3  V4  V5  V6  V7  V8 
8 H -0.3869 0.6206 0.279 -0.3867 -0.4915 -1.0979 -0.07696 -0.09097 
7 G -1.2966 -1.1279 -1.082 -0.4739 0.2717 -0.1365 0.38614 0.38445 
0

이것은 컬럼의 표준 편차를 계산하기위한 가장 빠르고 가장 짧은 방법 : 각 변수의 차이로 구성된 공 분산 행렬의 대각선 때문에

colSds = sqrt(diag(cov(data_matrix))) 

을 우리가 수행 다음

  • 가 MATR의 대각선을 추출 cov
  • 를 사용하여 공동의 분산 행렬을 계산 IX diag
  • 사용 그런 다음 특정 열 sd를 얻을 수 colSds[column_index]을 사용할 수있는 표준 편차

을 얻기 위해 sqrt를 사용하여 대각선 값의 제곱근을 가져 가라.

관련 문제