Найдите строки, содержащие общую пару значений в кадре данных, и объедините их по третьему столбцу. - PullRequest
0 голосов
/ 02 октября 2018

У меня есть датафрейм ниже:

Source<-c("DB","DB","DB","TC","TC","TC")
Drug<-c("a","a","c","d","a","c")
Target<-c("asd","asd","dch","dfg","asd","vgh")
file<-data.frame(Source,Drug,Target)

Source Drug Target

    1     DB    a    asd
    2     DB    a    asd
    3     DB    c    dch
    4     TC    d    dfg
    5     TC    a    asd
    6     TC    c    vgh

И моя цель состоит в том, чтобы создать фрейм данных - и, следовательно, файл csv - который будет определять, какие строки имеют одинаковую пару "Drug", "Target"между двумя разными «Источниками» и объедините эти строки в одну, чтобы получить форму ниже.Если пара существует более одного раза в «Source» - например, a-asd в DB - не следует хранить дважды.Приведенный выше кадр данных - это просто пример, поскольку может существовать пара из более чем двух источников - например, если в 6 источниках существует a-asd, то новое объединенное значение должно быть примерно таким: DB|TC|AD|SD|FG|FH

Source Drug Target
1  DB|TC    a    asd
2     DB    c    asd
3     TC    d    dfg
4     TC    c    vgh


fwrite(x = file22,file = 'Output.csv',na='NA')

1 Ответ

0 голосов
/ 02 октября 2018

С tidyverse:

library(tidyverse)
file%>%
   group_by(Drug,Target)%>%
   summarise(Source=glue::collapse(unique(Source),"|"))
# A tibble: 4 x 3
# Groups:   Drug [?]
  Drug  Target Source
  <fct> <fct>  <chr> 
1 a     asd    DB|TC 
2 c     dch    DB    
3 c     vgh    TC    
4 d     dfg    TC 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...