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

swe*_*ity 1 variables r unique collapse dataframe

我对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
Run Code Online (Sandbox Code Playgroud)

我要转换成

PMID      PL        subject
1         Canada    neurology
2         USA       cancer, respiratory
5         Canada    dermatology, cardiovascular
4         Japan     neurology
Run Code Online (Sandbox Code Playgroud)

实质上,每个PMID可以与多个主题相关联,因此我希望保留该信息.我只想要唯一的PMID行.我也想删除重复次数(例如,有3行"2"但其中2行是"癌症".另外,我还有其他变量,每个PMID对于其他每个都有相同的值变量(主题除外).

请指教.

谢谢!

WeN*_*Ben 5

尝试使用 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
Run Code Online (Sandbox Code Playgroud)

第二种方法

dat1=dat[!duplicated((dat)),]
aggregate(dat1$subject, list(dat1$PMID), paste, collapse=",")
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)