2017-06-16 65 views
1

我想基于两个(或更多)变量的唯一组合来计算变量id。考虑简单的例子如下:将唯一ID分配给数据帧中的等效行

# Example dataframe 
mydf <- data.frame(var1 = LETTERS[c(1, 2, 1)], var2 = LETTERS[c(2, 1, 3)]) 
mydf 

# var1 var2 
# A B 
# B A 
# A C 

在此,行1和2应具有相同的id因为ABBA表示相同的元件的组合。但第3行有不同的id,因为AC组合只出现一次。

# Desired output 
cbind(mydf, cid = c(1, 1, 2)) 

# var1 var2 cid 
# A B 1 
# B A 1 
# A C 2 

有什么建议吗?

回答

1

你可以从factor型基础R获益于:

mydf$cid <- as.numeric(factor(apply(mydf,1,function(x) paste0(sort(x), collapse = "")))) 

漠视秩序通过它在数据框中出现等价的行。 cumsum不能工作一次,例如,第2行和第3行在您的数据框中切换。

2

我们可以sort由行,创建一个逻辑vectorduplicated,并获得cumsum

cbind(mydf, cid = cumsum(!duplicated(t(apply(mydf, 1, sort))))) 
+1

例如,如果第2行和第3行在“mydf”中交换失败。 – 989

相关问题