2017-06-16 13 views
1

id変数は、2つ(またはそれ以上)の変数の固有の組み合わせに基づいて計算したいと思います。以下の単純な例を考える:ここデータフレーム内の同等の行に一意の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は、ACの組み合わせが1回しか出現しないので、異なるidを持っています。

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

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

ご提案がありますか?

答えて

1

を取得することができます:

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

それは順番を無視等価な行がデータフレームに現れる。 cumsumは一度は動作しません。たとえば、データフレームで行2と3が切り替わるとします。

2

我々が行によってsortduplicatedと論理vectorを作成し、そのための基本Rにfactorタイプから利益を得ることができるcumsum

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

たとえば、2行目と3行目が 'mydf'でスワップされると失敗します。 – 989

関連する問題