2013-07-24 3 views
0

У меня есть данные следующим образом:индексы Сжать в R

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) 

Однако для индекса дублированного узла, отличается отсортированный возвращается индекс. Кроме того, мне нужен обратный индекс возвращаемого индекса (или отсортированный $ ix).

Я новичок в R и как мне это сделать?

+0

У вас есть опечатка в 'idnex.return'. – Thomas

+0

Вы ищете 'уникальную'? – agstudy

+0

@Thomas Thx. Изменено уже. – SolessChong

ответ

0

Возможно, вы могли бы сэкономить некоторое количество памяти, указав тип индекса на «коэффициент».

Например:

> 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 
+0

Это работает. И я придумал решение. Смотри ниже. – SolessChong

+1

Кажется, вам нужен компактный индекс из вашего решения. Из-за моей небольшой репутации я добавляю свой комментарий здесь. Возможно, просто нужно добавить эту строку «levels (d1 $ x) <- 1: length (levels (d $ x))» к кодам, которые я опубликовал ранее. Это даст вам компактный индекс. –

+0

Точно. Спасибо приятель. – SolessChong

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]] 
Смежные вопросы