2014-04-09 146 views
0

我有三個整數列的組合是唯一的數據框。在數據框中創建唯一列

是這樣的:

 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)都是獨一無二的。我需要創建新的整數唯一列,因此它保留(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 

編輯


下你的編輯,如果你需要一個唯一的整數,然後在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 

或一條線:

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

相關問題