Объединить данные в соответствии с частичным числовым соответствием - PullRequest
0 голосов
/ 01 февраля 2019

у меня есть два фрейма данных.

один структурирован так:

  code.  name.  
  1111   A B  
  1122   C D
  2122   C D
  2133   G H

другой:

 code_2.  name.  
  11       F
  21       G

я хочу получить третий dfчто в отношении соответствия кода объединить мои данные, присутствующие в первом кадре данных, с помощью разделителя «ИЛИ».Значение кода, которое я хочу сохранить - это значение второго df.Важно, чтобы совпадение между значениями кода было установлено для первого и второго номера кода , принадлежащего первому кадру данных.

 code.     name.  
  11     A B OR C D
  21     C D OR G H

спасибо за ваши предложения!

Ответы [ 2 ]

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

Если вы предпочитаете tidyverse, вы можете попробовать что-то вроде:

df %>%
 group_by(code. = str_extract(as.character(code.), "^.{2}")) %>%
 summarise(name. = paste(name., collapse = " OR "))

  code. name.     
  <chr> <chr>     
1 11    A B OR C D
2 21    C D OR G H

Он группирует по первым двум элементам из «кода».а затем объединяет «имя».столбец на основе этих элементов.

Или то же самое с использованием sub():

df %>%
 group_by(code. = sub("^(.{2}).*", "\\1", as.character(code.))) %>%
 summarise(name. = paste(name., collapse = " OR "))

Или то же самое с использованием substring():

df %>%
 group_by(code. = substring(as.character(code.), 1, 2)) %>%
 summarise(name. = paste(name., collapse = " OR "))
0 голосов
/ 01 февраля 2019

Вы можете использовать aggregate, т.е.

aggregate(name. ~ substr(code., 1, 2), df, paste, collapse = ' OR ')
#  substr(code., 1, 2)      name.
#1                  11 A B OR C D
#2                  21 C D OR G H

Вы можете позаботиться об именах столбцов, как обычно.

...