0

次のようなデータがあります。

    V1   V2
1 10001 1003
2 10002 1005
3 10002 1007
4 10003 1001
5 10003 1005
...

これらはエッジ リスト データです。

V1 のインデックスは非常にまばらで、[1..10001] 内のいくつかの数字だけが占められています。

たとえば、次のようなものですmax(V1) = 20000 but range(V1) = [10000, 20000].

インデックスを圧縮したい。

これが私がやったことです:

sorted <- sort(data, index.return = T)

ただし、ノード インデックスが重複している場合は、異なるソート済みインデックスが返されます。また、返されたインデックス (または、sorted$ix) の逆インデックスも必要です。

私はRを初めて使用しますが、どうすればよいですか?

4

2 に答える 2

0

私はRが初めてで、コードは醜いかもしれません。見苦しいところがあれば修正してください。

主なアイデアは、一意の実行とルックアップ テーブルの実行です。

# index compression
V1_uniq = unique(data[,1])
V3_uniq = unique(data[,3])

user_n = length(V1_uniq)
ast_n = length(V3_uniq)

rst = sort(V1_uniq, index.return = T)
LUT1 = c(0)
for ( i in 1 : length(rst$x) )
    LUT1[V1_uniq[i]] = rst$ix[i]

usr_comp = LUT1[data[,1]]

rst = sort(V3_uniq, index.return = T)
LUT3 = c(0)
for ( i in 1 : length(rst$x) )
    LUT3[V3_uniq[i]] = rst$ix[i]

ast_comp = LUT3[data[,3]]
于 2013-07-24T09:31:23.697 に答える
0

インデックスのタイプを「factor」にキャストすることで、メモリを節約できるかもしれません。

例えば:

> d <- data.frame(x = rep(c(1000, 2000), 10000), y=rep(c(100, 150), 10000)) 
> object.size(d)
320448 bytes
> d1 <- data.frame(x=as.factor(d$x), y=as.factor(d$y))
> object.size(d1)
160992 bytes
于 2013-07-24T08:30:18.440 に答える