2014-04-09 2 views
0

세 개의 정수 열의 조합이 고유 한 데이터 프레임이 있습니다. 같은데이터 프레임에 고유 한 열 만들기

뭔가 : 열 (p1_b + P2_B + p3_b)의

 p1_b p2_b p3_b b1 f1 b2 f2 b3 f3 
1  0 0 0 0 40 0 20 0 160 
2  0 0 1 0 40 0 20 4 152 

조합은 고유합니다. 나는 (p1_b + p2_b + p3_b) 열의 순서를 보존 할 수 있도록 새로운 정수 고유 열을 생성해야한다. 같은

뭔가 :

> d <- transform(data, id = p1_b * 10000 + p2_b * 100 + p3_b) 

하지만 더 R 별.

업데이트 :

내가 하나의 예를 들어 줄 내 질문이 더 명확하게하려면 :

paste0(p1_b, p2_b, p3_b) 

값 (0 1 0)과 두 개의 행으로 완벽한 해결책이 아니다 (0 0 10) 같은 수의이 약 10

+0

당신이 더 무슨 뜻 이죠 R 특정? –

+0

글쎄, 나는 그것이 마법의 상수 (10,000 및 100)를 가지고 있기 때문에 나의 해결책을 좋아하지 않는다. p3_b가 100보다 큰 경우 솔루션이 손상됩니다. – demas

답변

1

무엇을 제공합니다 ..

transform(data, id = paste0(p1_b, p2_b, p3_b)) 


# p1_b p2_b p3_b b1 f1 b2 f2 b3 f3 id 
#1 0 0 0 0 40 0 20 0 160 000 
#2 0 0 1 0 40 0 20 4 152 001 
,691,363 당신이 3 선

data <- transform(data, ref = paste(p1_b, p2_b, p3_b, sep = ".")) 
refDF <- data.frame(ref = unique(data$ref), id = 1:length(unique(data$ref))) 
merge(data, refDF, by = "ref" , all = TRUE)[-1] 

#  p1_b p2_b p3_b b1 f1 b2 f2 b3 f3 id 
#1 0 0 0 0 40 0 20 0 160 1 
#2 0 0 1 0 40 0 20 4 152 2 

# id is an integer running 1:n unique p1_b p2_b p3_b comninations 

또는에서 다음, 고유 정수를 필요한 경우 편집 다음210


편집


한 줄에 :

transform(data, id = as.integer(as.factor(paste(p1_b, p2_b, p3_b, sep = ".")))) 
+0

우선 정수 열이 필요합니다 (미안하지만 말하지 않았습니다).이 솔루션은 순서와 고유 항목을 보존하지 않습니다. 예를 들어, 값 (0 1 0) 및 (0 0 10)은 (010 및 0010) 또는 10을 정수로 제공합니다. – demas

관련 문제