折叠唯一行但在 R 中保留一个变量

Collapsing unique rows but retaining a variable in R

我对 R 比较陌生,不知道如何表达我的问题。基本上,我有一个数据框 test 看起来像:

PMID     PL           subject
1        Canada       neurology
2        USA          cancer
5        Canada       dermatology
2        USA          respiratory
4        Japan        neurology
2        USA          cancer
5        Canada       cardiovascular

我想转换成

PMID      PL        subject
1         Canada    neurology
2         USA       cancer, respiratory
5         Canada    dermatology, cardiovascular
4         Japan     neurology

本质上,每个 PMID 都可以关联到多个主题,因此我想保留该信息。我只想要唯一的 PMID 行。但是,我也确实想要删除重复出现的事件(例如,有 3 行“2”,但其中 2 行是 "cancer." 此外,我还有其他变量,并且每个 PMID 的每个值都相同其他变量(主题除外)。

请指教

谢谢!

尝试使用 dplyr

dat%>%group_by(PMID)%>%dplyr::summarise(subject=toString(unique(subject)))
# A tibble: 4 x 2
   PMID                     subject
  <int>                       <chr>
1     1                   neurology
2     2         cancer, respiratory
3     4                   neurology
4     5 dermatology, cardiovascular

第二种方法

dat1=dat[!duplicated((dat)),]
aggregate(dat1$subject, list(dat1$PMID), paste, collapse=",")

EDIT1 :根据您更新的 data.frame ,您应该使用 mutate

dat%>%group_by(PMID)%>%dplyr::mutate(subject=toString(unique(subject)))%>% distinct(PMID, .keep_all = TRUE)


# Groups:   PMID [4]
   PMID     PL                     subject
  <int>  <chr>                       <chr>
1     1 Canada                   neurology
2     2    USA         cancer, respiratory
3     5 Canada dermatology, cardiovascular
4     4  Japan                   neurology

这是另一个选项 data.table

library(data.table)
unique(setDT(df1))[, .(subject = toString(subject)), by = PMID]
#   PMID                     subject
#1:    1                   neurology
#2:    2         cancer, respiratory
#3:    5 dermatology, cardiovascular
#4:    4                   neurology