R эквивалент массива_pop для объединения двухсимвольных фреймов данных? - PullRequest
0 голосов
/ 26 февраля 2019

Я озадачен отсутствием эквивалента массива pop в R-кадрах данных.Я проверил dplyr, и ничего такого нет.

Вот кадр данных 1, который представляет собой не что иное, как слова, числа и групповое слово.Цель состоит в том, чтобы по порядку сопоставить вопросы из информационного кадра 2 с содержимым информационного кадра 1, останавливаясь, когда больше нет совпадений.

DF1
Word    Volume    Group
tuna    100    fish
tuna fish    90    fish
chicken eggs    90    eggs
ostrich eggs    80    eggs

DF2
Group_Word    Question
fish    how big is a tuna fish?
fish    what's the best tasting tuna fish?
eggs    how many eggs does a chicken lay per day?
eggs    how to poach eggs?
eggs    do eggs need to be refrigerated?
beef    what's the best flavor of beef

dplyr left_join может показаться логичным выбором, но этоне работает, вместо этого выплевывая что-то, что больше похоже на полное объединение.

blendeddf <- left_join(DF1,DF2, by =c("Group" = "Group_Word"))

Это ожидаемый / ожидаемый результат:

DF1
Word    Volume    Group
tuna    100    fish    how big is a tuna fish?
tuna fish    90    fish    what's the best tasting tuna fish?
chicken eggs    90    eggs    how many eggs does a chicken lay per day?
ostrich eggs    80    eggs    how to poach eggs?

Это фактический результат:

Word Volume Group                                  Question
1          tuna    100  fish                   how big is a tuna fish?
2          tuna    100  fish        what's the best tasting tuna fish?
3     tuna fish     90  fish                   how big is a tuna fish?
4     tuna fish     90  fish        what's the best tasting tuna fish?
5  chicken eggs     90  eggs how many eggs does a chicken lay per day?
6  chicken eggs     90  eggs                        how to poach eggs?
7  chicken eggs     90  eggs          do eggs need to be refrigerated?
8  ostrich eggs     80  eggs how many eggs does a chicken lay per day?
9  ostrich eggs     80  eggs                        how to poach eggs?
10 ostrich eggs     80  eggs          do eggs need to be refrigerated?

Если бы я делал это в PHP, это было бы array_match, а затем array_pop для удаления элементов (чтобы избежать повторения), но я понятия не имею, как это сделать в R. Что мне делать?

Код DPUT:

structure(list(Word = c("tuna", "tuna fish", "chicken eggs", 
"ostrich eggs"), Volume = c(100L, 90L, 90L, 80L), Group = c("fish", 
"fish", "eggs", "eggs")), class = "data.frame", row.names = c(NA, 
-4L))
structure(list(Group_Word = c("fish", "fish", "eggs", "eggs", 
"eggs", "beef"), Question = c("how big is a tuna fish?", "what's the best tasting tuna fish?", 
"how many eggs does a chicken lay per day?", "how to poach eggs?", 
"do eggs need to be refrigerated?", "what's the best flavor of beef"
)), class = "data.frame", row.names = c(NA, -6L))

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете получить ожидаемые результаты, добавив дополнительный столбец, отмечающий номер в каждой группе:

DF1 = DF1 %>%
    group_by(Group) %>%
    mutate(GroupNum = 1:n())
DF2 = DF2 %>%
    group_by(Group_Word) %>%
    mutate(GroupNum = 1:n())

DF1 %>%
    left_join(DF2, by = c("Group" = "Group_Word", "GroupNum"))

Вывод:

# A tibble: 4 x 5
# Groups:   Group [2]
  Word         Volume Group GroupNum Question                                 
  <chr>         <int> <chr>    <int> <chr>                                    
1 tuna            100 fish         1 how big is a tuna fish?                  
2 tuna fish        90 fish         2 what's the best tasting tuna fish?       
3 chicken eggs     90 eggs         1 how many eggs does a chicken lay per day?
4 ostrich eggs     80 eggs         2 how to poach eggs?  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...