2016-09-13 16 views
0

私は要因を使用したいが、いくつかの問題に遭遇した。私の質問は、私は完全な要因を理解していなかったことが明らかになったかもしれません:)rの因子を効率的に使用するには?

は、例えば次のようなデータ「my_data」(実際のデータははるかに大きいですが、似た形の)考えてみましょう:最初の

0,stack 
0,exchange 
0,overflow 
1,list 
1,stack 

を列はuser_id第2列はタグです。私はすべてのユーザのタグ交差を計算したい。これを効率的に行うには、文字列ではなく整数で計算したいと思います。

だから私は要因が行く方法です。私は

Factor w/ levels "stack", "exchange", "overflow", "list": 1 2 3 4 1 

次のものがある:

unique(my_data[my_data$V1 == 0, 2]) 

はもちろん返しIDが0のユーザーのためにすべてのタグを取得するには、列2のうちの要因を作ることは私にこのように見えるものを提供します文字列を含むベクトル。このベクトルのファクタから対応するインデックスを取得するにはどうしたらいいですか?

+0

'as.numeric(一意(my_data [V1] == 0、2)))'? – Roland

+0

あなたの期待する結果は何ですか? – JasonAizkalns

+0

効率性を考慮すると、ファクタや文字列を使用するかどうかは関係ありません。私が知る限り、新しいバージョンのRはvector/data.frameの文字列に文字列プーリングを実行するので、整数を比較するのと同じです。 –

答えて

0

私はdata.tableパッケージをお勧めします!

test <- data.table(id = c(0, 0, 0, 1, 1), tag = c('a', 'b', 'c', 'd', 'a')) 

## Sort IDs by tag 
test[,id, by = tag] 

## Return True for tags used by ID == 0, False otherwise 
test[,id==0, by = tag] 

## Return tags used by ID == 0 
test[id ==0,id, by = tag] 
test[id ==0,tag] 

## Return tags used by all IDs 
n.ids<-length(unique(test$id)) 
test[length(unique(id==n.ids)),tag] 

希望します。

関連する問題