0

重複の可能性:
Rで実際に距離を計算せずに、データフレームをクラス「dist」のオブジェクトに変換します

data.frame に読み込むと、次のようなキーワード間の類似性の非常に大きな csv ファイルがあります (したがって、R では for ループに時間がかかりすぎます)。

> df   
kwd1 kwd2 similarity  
a  b  1  
b  a  1  
c  a  2  
a  c  2 

次のように、これを dist オブジェクトに変換したいと思います。

> dObject  
  a b  
b 1    
c 2 0

これを機能させることができませんでした: 実際にRで距離を計算せずに、データフレームをクラス「dist」のオブジェクトに変換します

私が持っていた別のアイデアは、Matrix() を使用してスパース マトリックスを作成することでしたが、csv がかなり大きいため、マトリックスを効率的に作成する方法がわかりません。おそらく適用関数ですか?

多分reshape()?

---- 更新 ---- これは上記のおもちゃのデータセットで動作するようです: https://stats.stackexchange.com/questions/6827/effective-way-to-populate-matrix-in-r

ただし、この例では matrix() を使用していますが、メモリ上の理由からスパースな Matrix() を使用したいと考えています。

--- さらに ---- 以前から同様の投稿があります。ただし、データセット内のすべての要素間のリンクではないこのケースでは、それからのアドバイスが機能するとは思いません。csv には、前の投稿のようにすべてのキーワード間のペアごとの類似性が含まれていません 。 Rで実際に距離を計算せずに、クラス「dist」のオブジェクトへのデータフレーム

4

1 に答える 1

0

これを試して

# Generate some dummy data (since you didn't provide your data)
df <- data.frame(V1=sample(letters, 10, TRUE),
                 V2=sample(letters, 10, TRUE),
                 V3=sample(200, 10, TRUE))

df$V1df$V2は因子であり、レベルが異なる可能性があるため、それらを比較可能にする必要があります。たとえば、 in が"a"inV1と同じであることを確認"a"V2ます。

# Convert letters to integers
my.objects <- sort(unique(c(as.character(df$V1), as.character(df$V2))))
df$V1 <- match(df$V1, my.objects)
df$V2 <- match(df$V2, my.objects)

空の距離行列を作成し、 と でV3指定された位置にV1の値を入力しますV2。最後に、それを適切なdistオブジェクトに変換します。

# Create an empty distance matrix
n <- length(my.objects)
dist.mat <- matrix(NA, n, n)
i <- as.matrix(df[-3])
dist.mat[i] <- dist.mat[i[,2:1]] <- df$V3

my.dist <- as.dist(dist.mat)
于 2012-09-05T07:18:42.510 に答える