Объединить строки, содержащие похожие строки, используя dplyr - PullRequest
2 голосов
/ 20 февраля 2020

У меня есть таблица, содержащая следующие данные:

df <- tibble(
  dose = seq(10, 50, 10), 
  date = c("2007-12-15", "2007-10-13","2007-10-13","2007-09-30","2007-09-30"), 
  response = c(45, 67, 66, 54, 55), 
  name = c("Peter,Martin", "Gale,Rebecca", "Rebecca,Gale", "Jonathan,Smith", "Smith,Jonathan")
)

Таблица:

# A tibble: 5 x 4
   dose date       response name          
  <dbl> <chr>         <dbl> <chr>         
1    10 2007-12-15       45 Peter,Martin  
2    20 2007-10-13       67 Gale,Rebecca  
3    30 2007-10-13       66 Rebecca,Gale  
4    40 2007-09-30       54 Jonathan,Smith
5    50 2007-09-30       55 Smith,Jonathan

В одном из столбцов с именем name либо есть строка "FirstName, LastName" или «Фамилия, Имя». Я sh объединю строки, содержащие одинаковые имена, если они упорядочены в любом случае. Например, строки, содержащие Rebecca, Gale и Gale, Rebecca должны объединиться.

При объединении я sh получу суммы столбцов dose и response и хочу сохранить первую из записей date и name.

Ожидаемый результат:

# A tibble: 3 x 4
   dose date       response name          
  <dbl> <chr>         <dbl> <chr>         
1    10 2007-12-15       45 Peter,Martin  
2    50 2007-10-13      133 Gale,Rebecca  
3    90 2007-09-30      109 Jonathan,Smith

Обратите внимание, что я всегда хочу объединить, используя столбец name, а не столбец date, потому что даже если пример содержит одинаковые даты, моя большая таблица содержит разные даты для одного и того же имени.

1 Ответ

3 голосов
/ 20 февраля 2020

Вот одна идея.

library(tidyverse)

df2 <- df %>%
  mutate(date = as.Date(date)) %>%
  mutate(name = map_chr(name, ~toString(sort(str_split(.x, ",")[[1]])))) %>%
  group_by(name) %>%
  summarize(dose = sum(dose),
            response = sum(response),
            date = first(date)) %>%
  select(names(df)) %>%
  ungroup()
df2
# # A tibble: 3 x 4
#    dose date       response name           
#   <dbl> <date>        <dbl> <chr>          
# 1    50 2007-10-13      133 Gale, Rebecca  
# 2    90 2007-09-30      109 Jonathan, Smith
# 3    10 2007-12-15       45 Martin, Peter 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...