2016-05-06 9 views
2

私は、複数の患者の観察とその診断を経たデータセットを持っています。 9つの異なるダミー変数があり、それぞれが特定の診断を表し、例えば、 L40、L41、K50、M05などがある。複数の列にわたるグループによって最後の観測が行われました

ダミー変数に欠損値がある場合、患者が最後に不足していない値を繰り越して、患者が診断を受け取ると、後続の観察に進むようにします。

これは、動物園パッケージのna.locf関数を使用して始めました。

diagdata <- originaldata[,grep("^patient|^ar|^edatum|^K|^L|^M",colnames(originaldata))] 

require(zoo) 
require(data.table) 

diagnosis <- data.table(diagdata) 

diagnosis[,L40:=na.locf(L40),by=patient] 

これは私が探しているものを達成しますが、問題の列(L40)のみで実現します。関連するすべての診断列、すなわちK、LおよびMで始まる列に上記を適用する方法はありますか?

+0

'data.table()'の代わりに 'setDT'または' as.data.table'を使用して、 'data.frame'を代わりに、またはコピーとして変換します。 – eddi

答えて

5
cols = grep("^K|^L|^M", names(diagnosis), value = T) 

diagnosis[, (cols) := na.locf(.SD, na.rm = F), by = patient, .SDcols = cols] 

efficiently locf by groups in a single R data.tableもご覧ください。

+0

na.locfの代替data.table関数でのみ? – skan

+0

ロール= T、Inf、-Infは同じです –

+1

@MMローリングジョインではlocf、ジョインでは**が発生します。これを結合問題に変換することは可能ですが、それはRの効果的な使用ではありません。 – eddi

関連する問題