データフレームの文字列で行を比較し、それを第2のデータフレームと比較する必要があります。試験データフレームは、以下に示されている。Rデータフレーム内の文字列を列で比較して新しい列を作成する
pat_id line_code month_rule
1 r 0
1 chop 0
1 rchop 0
1 rchop 0
1 rchp 0
1 rchp 0
1 rchop 1
1 fr 0
2 f 0
2 fr 0
2 fr 1
ベンチデータフレーム(ベンチマーク)は、比較のための標準ラインコードを有する。以下のサンプルのベンチマークデータフレームである -
line_code
gb
rc
br
fr
ir
r2
rchop
rcyclo
rcvp
rfnd
rcp
cp
フォーカスが新しい行である場合を識別するテストデータフレーム内の新しい列を作成することです。以下の新しい行を識別するための条件である -
- month_ruleが1である場合、それは行6までのすべてが単一の行に属し、患者1のための新たなライン
- あります。これは、文字列 "r"、 "chop"、 "rchp"がベンチマークデータフレームの一部ではないためです。
- 行7では、患者1は、ベンチマークデータフレームと一致する「fr」ラインコードを有し、したがってそれは新しいラインでもある。
最終出力データは次のようになります -
pat_id line_code month_rule line
1 r 0 1
1 chop 0 1
1 rchop 0 1
1 rchop 0 1
1 rchp 0 1
1 rchp 0 1
1 rchop 1 2
1 fr 0 3
2 f 0 1
2 fr 0 1
2 fr 1 2
私のアプローチは、この使用してdplyrを解決することでした。非常に多くの条件があったので、私は最終的な解決に到達できませんでした。ここで私はそれについて考えていた -
library(dplyr)
test<-test%>%rowwise()%>%
mutate(test$line=ifelse(month_rule==0 & test$line_code!=bench$line_code), 1,0)
これは最終的な解決策ではありません。しかし、それを解決する良い方法はありますか?
ベンチマークデータフレームに 'rchop'があります。どうして3行目で' pat_id == 1 'に改行しませんか?また、frもベンチマークデータフレームにあり、10行目に 'pat_id == 2 'の新しい行はありませんか? – Psidom
'r'タグを使用しているときは、' dput() 'でデータを共有してください。マウスの上にマウスを置くと詳細情報が表示されます。 –
@Psidom基本的に、ラインコードは、時間枠の間に患者に提供される異なる薬剤です。行1の患者== 1の場合、彼は「r」投薬のみが与えられる。行2では、「c」、「h」、「o」、「p」投薬が与えられる。 3行目には全ての "rchop"投薬が与えられていますが、まだ1行目に入っています.6行目では "rchp"しか与えられませんが、それはその患者の1行目に属しています。 – x1carbon