2017-08-07 7 views
1

私はRには比較的新しいので、質問のフレーズの仕方を正確にはわかりません。基本的に、私がどのように見えるデータフレームtest持っている:私は本質的には一意の行を折りたたみながら変数を保持する

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

に変換したい

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は、複数の被験者に相関することができますので、私はその情報を保持したいです。私は唯一の一意のPMID行が必要です。私はまた、(例えば、 "2"の3行がありますが、それらのうち2つは "がん"です)また、私は他の変数も持っていて、それぞれのPMIDは他の変数と同じ値を持っています(対象を除く)の変数。

お知らせください。

ありがとう!

答えて

5

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:、あなたはここで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つ以上の変数があり、コードは2つの変数を保持し、他の変数(同じPMIDの間では定数)を除外します。 – sweetmusicality

+0

@sweetmusicality更新された答えを確認します。 – Wen

+0

ありがとうございます:)それは動作します! – sweetmusicality

1

を使用する必要があり、あなたのdata.frame更新のベースが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 
関連する問題