2016-10-10 5 views
2

로 colums에서 고유 한 값 I 다음 예제 데이터 프레임 가지고Dataframe : 새로운 열 이름

data.frame(ID=c(1:9),COLOR=c('red','green','blue','white','black','yellow','red','blue','red'), 
      SHAPE=c('square','circle','triangle','square','triangle','circle','circle','circle','square'), 
      VAR_X=c(5,8,3,9,7,4,2,9,12)) 


    ID COLOR SHAPE VAR_X 
1 1 red square  5 
2 2 green circle  8 
3 3 blue triangle  3 
4 4 white square  9 
5 5 black triangle  7 
6 6 yellow circle  4 
7 7 red circle  2 
8 8 blue circle  9 
9 9 red square 12 

I 색 및 형상의 조합으로 각각의 고유 값에 대한 새 항목을 작성할이 dataframe으로한다. 예를 들어 '빨간색 사각형', '녹색 원', '파란색 삼각형', '흰색 사각형', '검은 삼각형', '노란색 원', '빨간색 원', '파란색 원 '. 새 열의 각 관측 값은 COLOR 및 SHAPE 조합과 일치해야합니다. 난 단지 독특한 조합을 원하기 때문에, '붉은 광장'에 대한 새 열 번만 작성해야

ID COLOR SHAPE VAR_X red_square 
1 1 red square  5  true 
2 2 green circle  8  false 
3 3 blue triangle  3  false 
4 4 white square  9  false 
5 5 black triangle  7  false 
6 6 yellow circle  4  false 
7 7 red circle  2  false 
8 8 blue circle  9  false 
9 9 red square 12  true 

:처럼 '붉은 광장'이 보일 것입니다. 데이터 프레임에 존재하지 않는 가능한 모든 조합 (예 : 흰색 원)에 대해 열 이름을 만들어야합니다.

누구든지 내가 원하는 해결책을 가지고 있습니까?

답변

3

우리는

cbind(df1, as.data.frame.matrix(with(df1, table(ID, paste(COLOR, SHAPE, sep="_"))!=0))) 
# ID COLOR SHAPE VAR_X black_triangle blue_circle blue_triangle green_circle red_circle red_square white_square yellow_circle 
#1 1 red square  5   FALSE  FALSE   FALSE  FALSE  FALSE  TRUE  FALSE   FALSE 
#2 2 green circle  8   FALSE  FALSE   FALSE   TRUE  FALSE  FALSE  FALSE   FALSE 
#3 3 blue triangle  3   FALSE  FALSE   TRUE  FALSE  FALSE  FALSE  FALSE   FALSE 
#4 4 white square  9   FALSE  FALSE   FALSE  FALSE  FALSE  FALSE   TRUE   FALSE 
#5 5 black triangle  7   TRUE  FALSE   FALSE  FALSE  FALSE  FALSE  FALSE   FALSE 
#6 6 yellow circle  4   FALSE  FALSE   FALSE  FALSE  FALSE  FALSE  FALSE   TRUE 
#7 7 red circle  2   FALSE  FALSE   FALSE  FALSE  TRUE  FALSE  FALSE   FALSE 
#8 8 blue circle  9   FALSE  TRUE   FALSE  FALSE  FALSE  FALSE  FALSE   FALSE 
#9 9 red square 12   FALSE  FALSE   FALSE  FALSE  FALSE  TRUE  FALSE   FALSE 
+0

table 내가이와 추가 문제가있을 수 있습니다. # 1과 # 2가 같은 ID를 갖고 # 7과 # 8이 같다고 가정합니다. 결과를 그룹화하여 어떻게 red_square = TRUE와 green_circle = TRUE 또는 # 1과 # 2를 얻을 수 있고 비슷한 red_circle = TRUE와 # 7과 # 8에 대해 blue_circle = TRUE입니까? 그래서 기본적으로, 내 질문은 ID로 결과를 그룹화 할 수 있습니다. –

+0

@Joep_S이 경우, 당신은 '테이블'방식으로 그룹을 할 수 있습니다. – akrun

+0

group_by가 구문에 있어야하는 위치를 알려주시겠습니까? 여러 가지 시도를했지만 오류나 결과는 의미가 없습니다. –

관련 문제