2016-04-15 10 views
0

を持つ2つの既存のテーブルに基づいて新しいテーブルを作成しますが、私は次のような問題を持っています:多くの診断、特定の患者と日付と説明してこれはおそらく愚かである特定の基準

therapyID patientID startoftherapy endoftherapy 
1   1  233   5.5.10  6.6.11 
2   2  233   7.7.11  8.8.11 
3   3  344   1.1.09  3.2.10 
4   4  344   3.3.10  10.10.11 
5   5  544   2.1.09  3.2.10 
6   6  544   4.3.12  4.3.14 
7   7  113   1.1.12  1.1.15 
8   8  123   2.1.13  1.1.15 
9   9  543   2.1.09  3.2.10 
10  10  533   7.7.11  8.8.14 

2)表:私は新しいテーブルを作成したい

diagnosisID dateofdiagnosis patientID diagnosis 
1   11   8.8.10  233  xxx 
2   22   5.10.11  233  yyy 
3   33   8.9.11  233  xxx 
4   44   2.2.09  344  zzz 
5   55   3.3.09  344  yyy 
6   666   2.2.12  123  zzz 
7   777   3.3.12  123  yyy 
8   555   3.2.10  543  xxx 
9   203   8.8.12  533  zzz 

、すなわち、患者ID、開始治療と終了治療との間の一致基準を用いて、患者の診断と比較することができる。このような何か:

therapyID diagnosisID patientID dateofdiagnosis diagnosis 
1   1   11  233  08.08.10  xxx 
2   2   22  233  05.10.11  yyy 
3   2   33  233  08.09.11  xxx 

- 私のやり方未経験にこれを行うには、誰もがこれで私を助けたり、正しい方向に私を指すことができますか?

+1

データフレーム(内部、外部、左、右)を結合する方法(マージ)の可能な複製?](http://stackoverflow.com/questions/1299871/how-to-join-merge-data-frames - 内側 - 外側 - 左 - 右) – Chris

答えて

0

我々は `plyrでそれを行うことができます:私たちはdplyrをロード

# We recreate your data.frames 
df1 <- read.table(text=" 
therapyID patientID startoftherapy endoftherapy 
1   1  233   5.5.10  6.6.11 
2   2  233   7.7.11  8.8.11 
3   3  344   1.1.09  3.2.10 
4   4  344   3.3.10  10.10.11 
5   5  544   2.1.09  3.2.10 
6   6  544   4.3.12  4.3.14 
7   7  113   1.1.12  1.1.15 
8   8  123   2.1.13  1.1.15 
9   9  543   2.1.09  3.2.10 
10  10  533   7.7.11  8.8.14", h=T) 

df2 <- read.table(text=" 
diagnosisID dateofdiagnosis patientID diagnosis 
1   11   8.8.10  233  xxx 
2   22   5.10.11  233  yyy 
3   33   8.9.11  233  xxx 
4   44   2.2.09  344  zzz 
5   55   3.3.09  344  yyy 
6   666   2.2.12  123  zzz 
7   777   3.3.12  123  yyy 
8   555   3.2.10  543  xxx 
9   203   8.8.12  533  zzz", h=T) 

。あなたが持っていなければinstall.packages("dplyr")patientIDによって

library(dplyr) 

その後、我々left_join。グラフィカルな定義(以上)はhereです。その後、列の順序を並べ替えます。

# we first left_join 
    left_join(df1, df2, "patientID") %>% 
     select(therapyID,diagnosisID,patientID, dateofdiagnosis, diagnosis) %>% 
     arrange(therapyID) 

は、我々は得る:

therapyID diagnosisID patientID dateofdiagnosis diagnosis 
1   1   11  233   8.8.10  xxx 
2   1   22  233   5.10.11  yyy 
3   1   33  233   8.9.11  xxx 
4   2   11  233   8.8.10  xxx 

出力はあなたが原因行の順序を設けたものと異なることがあります。 arrangeで変更できます。これは、あなたの望むことですか?


EDIT

私は、あなたが最初に正しく日付フォーマットに時間列を変換する必要があり、診断の日は治療

の間に起こっていなかったケースを整理したいです。この機能は、あなたのフォーマットのために仕事をしていません:

ch2date <- function(x) as.Date(x, format="%d.%m.%y") 

我々はパイプにそれを含めると、その後のフィルタリングのためにこれらの列を使用することができます。

left_join(df1, df2, "patientID") %>% 
    mutate(startoftherapy = ch2date(startoftherapy), 
     endoftherapy = ch2date(endoftherapy), 
     dateofdiagnosis = ch2date(dateofdiagnosis)) %>% 
    filter(startoftherapy < dateofdiagnosis, dateofdiagnosis < endoftherapy) %>% 
    select(therapyID, diagnosisID, patientID, dateofdiagnosis, diagnosis) %>% 
    arrange(therapyID) 

それはあなたの問題を解決していますか?

+0

ハイ・ヴィンセント、あなたの答えに感謝します。これは私が必要としていたほとんどです。私はまだ治療の時間内に発生しなかった診断を整理する必要があります: – Ben

+0

okey。私はそれから私の答えを編集しました! –

+0

非常に@ Vincent Bonhomme(私はルールが私に躊躇したので、私はあなたに感謝して遅れているが、誰もがそれをdoinを見たので、そう:ありがとう:)) – Ben

関連する問題