在数据框中创建唯一列

时间:2014-04-09 14:04:18

标签: r

我有数据框,其中三个整数列的组合是唯一的。

类似的东西:

     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)

但更具特异性。

更新:

为了使我的问题更清楚,我举一个例子:

paste0( p1_b, p2_b, p3_b)

不是完美的解决方案,因为具有值(0 1 0)和(0 0 10)的两行给出相同的数字10.

1 个答案:

答案 0 :(得分: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 = "."))))