我想根据两个(或更多)变量的唯一组合计算一个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
有什么建议吗?
发布于 2017-06-16 01:18:13
因此,您可以从基本R中的factor
类型中获益:
mydf$cid <- as.numeric(factor(apply(mydf,1,function(x) paste0(sort(x), collapse = ""))))
它忽略了数据帧中出现等效行的顺序。cumsum
一次不能工作,例如,数据帧中的第2行和第3行是交换的。
发布于 2017-06-16 00:57:51
我们可以逐行sort
,用duplicated
创建一个逻辑vector
并获取cumsum
cbind(mydf, cid = cumsum(!duplicated(t(apply(mydf, 1, sort)))))
https://stackoverflow.com/questions/44584966
复制