2016-06-27 2 views
0

데이터 처리에 문제가 있습니다.R : 값의 평균을 취하여 같은 이름의 열을 병합하십시오.

ind a b b c c c d 
1 0.1 0.2 0.2 0.3 0.5 0.7 0.9 
2 0.2 0.4 0.6 0.6 0.8 0.7 0.4 
... 

그래서 내가 처리 후, 동일한 이름을 가진 열을 병합하고 그 평균값을 취한다 원하는 :

내가 data.frame을 말해봐. 당신의 독서에 대한

ind a b c d 
1 0.1 0.2 0.5 0.9 
2 0.2 0.5 0.7 0.4 
... 

감사합니다 도움이 !! : 위 data.frame이 될 것입니다

+0

질문 말한다처럼 행렬이, 아니면 매트릭스 태그처럼? – alistaire

+0

'dput()'으로 데이터를 재현 할 수 있도록 공유하십시오. 'dput (head (your_data, 4))'충분해야합니다. 그런 식으로'matrix' 또는'data.frame'인지 여부를 알 수 있습니다. 다른 부정 행위가 있으면 R 세션에 코드를 복사/붙여 넣을 수 있습니다. – Gregor

+0

실수로 죄송합니다. 데이터 유형은 read.table()에서 직접 가져온 data.frame입니다. –

답변

0

이 작업을 수행하는 가장 좋은 방법은 각각 하나의 열 이름에 해당하는 열 인덱스 집합을 계산 한 다음 각 집합에 rowMeans()을 한 번 실행하는 것입니다.

split()을 사용하여 열 인덱스 집합을 목록으로 계산할 수 있습니다.

sapply(split(seq_len(ncol(m)),colnames(m)),function(cis) rowMeans(m[,cis,drop=F])); 
##  a b c d ind 
## [1,] 0.1 0.2 0.5 0.9 1 
## [2,] 0.2 0.5 0.7 0.4 2 

data.frame의 경우 : 매트릭스에 대한

as.data.frame(lapply(split(seq_len(ncol(df)),colnames(df)),function(cis) rowMeans(df[cis]))); 
##  a b c d ind 
## 1 0.1 0.2 0.5 0.9 1 
## 2 0.2 0.5 0.7 0.4 2 

데이터

df <- data.frame(ind=c(1L,2L),a=c(0.1,0.2),b=c(0.2,0.4),b=c(0.2,0.6),c=c(0.3,0.6),c=c(0.5,0.8 
),c=c(0.7,0.7),d=c(0.9,0.4),check.names=F); 
m <- as.matrix(df); 
관련 문제