2013-11-30 2 views
0

У меня есть головоломка для индексирования. Вот игрушка. У меня есть поиск df, HasCats, с 2 cols, Uid и Cats, который дает мне для каждого Uid группу категорий этого Uid. У меня есть еще один df, NeedsCats, которому нужна информация об атрибутах этой категории, добавленная к нему в новом столбце, в соответствии со значением Uid. Uid будет повторяться в NeedsCats.заполнение кадра данных col с совпадающим значением поиска столбца в другой кадре данных

NeedsCats <- data.frame("Uid" = c("B", "D", "A", "C", "C")) 
HasCats <- data.frame("Uid" = c("A", "B", "C", "D"), "Cat" = c("aa", "bb", "aa", "bb")) 

Я ищу заявление правильного назначения, которое заселить NeedsCats $ Cats правильных значений, значение lookedup в HasCats, каждое значение для $ Uid в NeedsCats, в этом случае с ("ббом "," bb "," aa "," aa "," aa ").

NeedsCats довольно длинный, и значения Uid будут повторяться и могут возникать в любом порядке.

У меня возникли проблемы с определением, как это сделать в векторизованном способе, который правильно использует индексирование R. Я думаю, что это, наверное, очень просто. Может кто-нибудь помочь?

спасибо!

ответ

2

Вы могли бы, например, попробовать merge:

merge(NeedsCats, HasCats) 
# Uid Cat 
# 1 A aa 
# 2 B bb 
# 3 C aa 
# 4 C aa 
# 5 D bb 

# or to avoid re-ordering 
merge(NeedsCats, HasCats, sort = FALSE) 

# for some reason the 'no sorting please' in merge rarely works for more complex merging 
# if order is important, and you don't want to re-order using `order` you may try: 
library(plyr) 
join(NeedsCats, HasCats) 
# Joining by: Uid 
# Uid Cat 
# 1 B bb 
# 2 D bb 
# 3 A aa 
# 4 C aa 
# 5 C aa 
+0

это выглядит идеально. Я дам ему прямо сейчас! –

+0

Рад, что вы нашли мой ответ полезным. Приветствия. – Henrik

0

Я только что уколол что-то, что кажется сработавшим ... Я перехожу к Uid в HasCats в имена строк, а затем индексирую на HasCats на основе этих меток, используя значения NeedsCats, которые нуждаются в согласовании, указав столбец для численного поиска.

rownames(HasCats) <- HasCats$Uid 
NeedsCats$Cat <- HasCats[NeedsCats$Uid, 2] 

Действительно ли это разумный способ обойти это, или есть что-то более очевидное, что я пропустил?

спасибо!

+0

это на самом деле не работает на моих реальных набор данных - Я запутал индексирование ..... (что-то вроде этого, вероятно, работает, хотя ...) –

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