我有数据框,其中三个整数列的组合是唯一的。
类似的东西:
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.
答案 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 = "."))))