2017-02-06 1 views
0

R 프로그램이 dataframe을 바꿀 방법 :내가 샘플 다음과 같은 dataframe이

 A B C 
[1,] "A1" "B3" "C1" 
[2,] "A2" "B1" "C2" 
[3,] "A3" "B3" "C3" 
[4,] "A1" "B2" "C3" 
[5,] "A3" "B3" "C2" 
[6,] "A1" "B1" "C1" 

내가 하나의 변수에 변수의 모든 고유 한 값을 확장하고, 이런 식으로 모양을 변경하고 싶은, 그리고 마크 값 필드에 1/0. 데이터 프레임이로 재편된다 이상 :.

 A B1 B2 B3 C1 C2 C3  
[1,] "A1" "0" "0" "1" "1" "0" "0" 
[2,] "A2" "1" "0" "0" "0" "1" "0" 
[3,] "A3" "0" "0" "1" "0" "0" "1" 
[4,] "A1" "0" "1" "0" "0" "0" "1" 
[5,] "A3" "0" "0" "1" "0" "1" "0" 
[6,] "A1" "1" "0" "0" "1" "0" "0" 

실제 데이터는 하루에 10 만, 그리고 훨씬 더 필드와 고유 값은 그래서 대신에 사용하는 고효율 프로그램이 필요합니다 (> 엄청난 양이다. 난 당신이 도움이 될 생각 ..

... 난 단지 알고 ... :(

+2

이것이 'data.frame'입니까? 표시 한 출력은 행렬처럼 보입니다. – Uwe

답변

-1

우리는와 (당신이 너무 시도 할 수

library(qdapTools) 
cbind(df1[1], mtabulate(as.data.frame(t(df1[-1])))) 
# A B3 C1 B1 C2 C3 B2 
#V1 A1 1 1 0 0 0 0 
#V2 A2 0 0 1 1 0 0 
#V3 A3 1 0 0 0 1 0 
#V4 A1 0 0 0 0 1 1 
#V5 A3 1 0 0 1 0 0 
#V6 A1 0 1 1 0 0 0 
+4

원하는 출력을 내지 않는다. 원하는 출력은'cbind (df1 [, "A"], mtabulate (as.data.frame (t (df1 [, -1]))))'또는' (3, 6, 1, 2, 4, 5) : cbind (A = df1 [, "A"], mtabulate (as.data.frame (t (df1 [, -1])) ])'그리고 아무런 설명이 없습니다 ... – Cath

+0

나는 정답을 위해 이런 종류의 downvoting을 이해하지 못합니다. – akrun

+2

FWIW, 대답이 올바르지 않습니다. – Axeman

0

를 사용할 수있는 초보자입니다) :

df <- cbind(as.character(df$A), model.matrix(~B+C+0,df,list(B=contrasts(df$B, contrasts=F), 
                 C=contrasts(df$C, contrasts=F)))) 
dimnames(df) <- list(NULL, c('A', paste0('B',1:3), paste0('C',1:3))) 
df 
#  A B1 B2 B3 C1 C2 C3 
#[1,] "A1" "0" "0" "1" "1" "0" "0" 
#[2,] "A2" "1" "0" "0" "0" "1" "0" 
#[3,] "A3" "0" "0" "1" "0" "0" "1" 
#[4,] "A1" "0" "1" "0" "0" "0" "1" 
#[5,] "A3" "0" "0" "1" "0" "1" "0" 
#[6,] "A1" "1" "0" "0" "1" "0" "0" 
+2

고마워요 ... 첫 번째 대답은 (아주 빨리) 최종 결과조차도 올바른 결과를 보여주었습니다 ~ 어쨌든 샘플은 ~입니다. 그래서 포인트 - 감사 @akrun을 붙잡은 것 같습니다 및 기타 답변 점점 더 정확 해지고 있습니다. 초보자만큼 영어를 잘하지 못해서 고맙습니다. 이제 다른 솔루션을 큰 감사를 통해 연구하고 있습니다 ~ @ -> - – Herbut

관련 문제