2014-06-19 2 views
3

일부 위치를 설명하는 데이터 세트가 있습니다. 범주 형 예측 자에 따라 일부 위치에서 일부 응답 메트릭 y를 집계합니다. 나는 출력집계 함수의 출력을 새 테이블로 재정렬하십시오.

location<-c('site1','site1','site1','site2','site2','site3','site3','site3','site3') 
p<-c('A','B','C','A','B','A','B','C','D') 
y<-c(1,2,3,1,2,1,2,3,4) 

data.frame(location,p,y) 

내가 원하는 것은 R에서이 작업을 수행 할 수있는 간단한 방법이이

p<-c('A','B','C','D') 
site1<-c(1,2,3,NA) 
site2<-c(1,2,NA,NA) 
site3<-c(1,2,3,4) 

data.frame(p,site1,site2,site3) 

과 같은 데이터 프레임으로 dataframe의이 유형을 얻을?

+1

무엇 훌륭하게 재생산 가능한 질문! – Gregor

답변

4
df1 <- data.frame(location,p,y) 
library(reshape2) 
dcast(df1, p ~ location, value.var = "y") 

## p site1 site2 site3 
## 1 A  1  1  1 
## 2 B  2  2  2 
## 3 C  3 NA  3 
## 4 D NA NA  4 
+0

이것은 완전히 작동하지만 repsonse G. Grothendieck은 패키지를 설치할 필요가 없습니다. – colin

2

tapply 이렇게 할 수 있습니다. 첫 번째 인수는 테이블의 본문에 이동하고, 두 번째 인수는 행과 열을 지정

tapply(DF[[3]], DF[2:1], c) 

기부 :이 또한 기록 할 수

location 
p site1 site2 site3 
    A  1  1  1 
    B  2  2  2 
    C  3 NA  3 
    D NA NA  4 

:

with(DF, tapply(y, data.frame(p, location), c)) 
+0

패키지를 설치할 필요가 없으므로이 방법을 선호합니다. 그러나이 코드를 실행하면 ABCD가 열 머리글로 사용되며 사이트 1-3이 첫 번째 열의 행으로 사용됩니다. tapply를위한 rpvoide 코드는 매우 직관적이지 않기 때문에, 위의 명령을 다시 작성하는 방법을 모릅니다. 제 목적에 유용하지 않습니다. – colin

+0

A, B, C, D에 열이 아닌 행을 제공하고 몇 가지 설명과 대체 'tapply'표현식을 추가 한 쿼리를 다시 작성했습니다. –

관련 문제