2012-07-31 2 views
2

나는 엑셀은 다음과 같은 열이 나는 그것이 어떻게 변경할 R : 테이블 형식

Column1 Column2 Column3 
ab  bb  0.5 
ab  bc  0.1 
ab  cd  0.7 
ab  dd  0.8 
ac  bb  0.2 
ac  bg  0.8 
ac  ee  0.8 
ac  dd  0.3 


x <- data.frame (column1 = c("ab","ab","ab","ab","ac","ac","ac","ac"), 
       column2 = c("bb","bc","cd","dd","bb","bg","ee","dd"), 
       column3 = c(0.5, 0.1, 0.7, 0.8, 0.2, 0.8, 0.8, 0.3)) 

와 파일이 있습니다.

ab ac 
bb 0.5 0.2 
bc 0.1 
cd 0.7 
dd 0.8 0.3 
bg  0.8 
ee  0.8 

답변

3

reshape2 패키지는 여기에 당신의 친구입니다 :

require(reshape2) 
dcast(x, column2 ~ column1, value.var="column3") 
# column2 ab ac 
# 1  bb 0.5 0.2 
# 2  bc 0.1 NA 
# 3  bg NA 0.8 
# 4  cd 0.7 NA 
# 5  dd 0.8 0.3 
# 6  ee NA 0.8 

업데이트 @jmsigner 이후

내가 같은 시간에 거의 정확히 같은 대답을 게시 한, 여기에 기본 R의 옵션입니다 ,하지만 그것은 출력의 좋은 당신을주지 않습니다 :

reshape(x, direction="wide", idvar="column2", timevar="column1") 
# column2 column3.ab column3.ac 
# 1  bb  0.5  0.2 
# 2  bc  0.1   NA 
# 3  cd  0.7   NA 
# 4  dd  0.8  0.3 
# 6  bg   NA  0.8 
# 7  ee   NA  0.8 
+0

(+1) 기반 솔루션의 기본 솔루션 – johannes

+0

일에 대한 당신의 오프닝 라인에 '당신 friend_ _is'를 사용합니다. – thelatemail

+0

@thelatemail, 아,하지만 DWin의 기본 솔루션은 훨씬 좋네요. 웬일인지, "내가 이것을 바꿀 생각이다."라는 질문을하는 대부분의 경우, 문제는 열과 행으로 논쟁하는 것입니다.'변형 된 (reshape) '변종 중 하나가'xtable '. 그러나, 나는 기꺼이 당신의 upvote를 "당신의 친구"부분으로 받아 들일 것입니다! – A5C1D2H2I1M1N2O1R2T1

3
xtabs(column3 ~ column2+column1, data=x, sparse=TRUE) 
6 x 2 sparse Matrix of class "dgCMatrix" 
    ab ac 
bb 0.5 0.2 
bc 0.1 . 
bg . 0.8 
cd 0.7 . 
dd 0.8 0.3 
ee . 0.8 

'희소'인수를 사용하지 않으면 누락 된 범주에 0이 표시됩니다. 당신은 그들을 대체 할 수있는`is.na < -

xt <- xtabs(column3 ~ column2+column1, data=x) 
is.na(xt) <- xt==0 
xt 
     column1 
column2 ab ac 
    bb 0.5 0.2 
    bc 0.1  
    bg  0.8 
    cd 0.7  
    dd 0.8 0.3 
    ee  0.8 
+0

나는 이런 종류의 문제에 대해'xtabs'를 항상 잊어 버렸습니다. 아마도이 경우에는 아마도 최고라고 생각합니다. (+1) – A5C1D2H2I1M1N2O1R2T1