2016-09-13 3 views
0

Я хочу использовать факторы, но столкнулся с некоторыми проблемами. Мои вопросы могли бы показать, что я не понимаю, факторы полностью :)Как эффективно использовать факторы в r?

Рассмотрим следующие данные «my_data», например (реальные данные гораздо больше, но подобной формы):

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

Первый column - user_id второй столбец теги, используемые пользователем. Я хочу вычислить пересечения тегов для всех пользователей. Чтобы сделать это эффективно, я хотел бы вычислить их по целым числам, а не по строкам.

Так что, хотя факторы - это путь. Создание фактор из колонки 2 дает мне тот, который выглядит следующим образом:

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

Следующая вещь, которую я делаю это:

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

Чтобы получить все теги для пользователя с идентификатором 0, который, конечно, возвращающего вектор со строками. Как теперь получить соответствующие индексы из коэффициента для этого вектора?

+0

'as.numeric (unique (my_data [my_data $ V1 == 0, 2]))'? – Roland

+0

Каков ваш ожидаемый результат? – JasonAizkalns

+0

Эффективность - не важно, используете ли вы факторы или строки: насколько я знаю, более новые версии R выполняют пул строк в строках в vector/data.frame, так что сравнения - это просто сравнение указателей , то же самое, что и сравнение целых чисел. –

ответ

0

Могу ли я предложить пакет данных.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] 

Надеюсь, что это поможет!

Смежные вопросы