R 为数据帧中的等效行分配唯一ID

R 为数据帧中的等效行分配唯一ID,r,dataframe,combinations,permutation,R,Dataframe,Combinations,Permutation,我想根据两个(或更多)变量的唯一组合来计算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 有什么建议吗?我们可以按行排序,用重复的创建一个逻辑的向量,然后得到总和 cbind(mydf, cid = cumsum(!duplic

我想根据两个(或更多)变量的唯一组合来计算
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

有什么建议吗?

我们可以
按行排序
,用
重复的
创建一个逻辑的
向量
,然后得到
总和

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

您可以受益于
因子
在基数R中键入:

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

例如,如果在
mydf
中交换第2行和第3行,则
mydf$cid失败。
mydf$cid <- as.numeric(factor(apply(mydf,1,function(x) paste0(sort(x), collapse = ""))))