2017-08-07 64 views
1

我對R相對比較陌生,不知道如何解釋我的問題。基本上,我有一個數據幀test看起來像:摺疊獨特的行,但在R中保留一個變量

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個是「癌症」)。另外,我還有其他變量,每個PMID對於其他變量都具有相同的值變量(除主題)。

請指教。

謝謝!

回答

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 

第二個方法

試試這個
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 
+0

您好另一種選擇,我更新了我的數據集,我的問題。我實際上有2個以上的變量,你的代碼只保留了兩個變量,並排除了其他變量(在同一個PMID中是不變的) – sweetmusicality

+0

@sweetmusicality檢查我更新的答案。 – Wen

+0

非常感謝:)它的作品! – sweetmusicality

1

這裏是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 
相關問題