我想根据两个(或更多)变量的唯一组合计算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
,因为AB
和BA
表示相同元素的组合。但是,第3行具有不同的id
,因为AC
组合只出现一次。
# Desired output
cbind(mydf, cid = c(1, 1, 2))
# var1 var2 cid
# A B 1
# B A 1
# A C 2
有什么建议吗?
答案 0 :(得分:2)
我们可以sort
按行,使用vector
创建逻辑duplicated
并获取cumsum
cbind(mydf, cid = cumsum(!duplicated(t(apply(mydf, 1, sort)))))
答案 1 :(得分:1)
您可以从基础R中的factor
类型中受益:
mydf$cid <- as.numeric(factor(apply(mydf,1,function(x) paste0(sort(x), collapse = ""))))
它忽略了等效行在数据框中出现的顺序。 cumsum
不起作用,例如,在数据框中切换第2行和第3行。