我想編寫一個函數,根據唯一值[id]子組內的所有其他記錄,對數據集中的每條記錄執行操作。我很新的R,但我知道,您可以根據使用下面的條件查詢的記錄的子集:尋找有效的方式來查詢R或Stata中的子組觀察
df$date[id == "1234"]
是否有可能取代「1234」從唯一的行衍生變量該功能正在運行?像...
df$date[id == df$id]
,這樣它拉[index]行索引行[id]匹配[id]的[日期]的值。在實踐中我會在一個循環,其中對x的值,我用可以查詢特定[日期]值使用此:
df$date[id == df$id & order == x]
我的數據集必須爲每個獨特的[ID]多個記錄。最終,我想將每個記錄的[date_1]值與每個索引記錄[id]子組中所有其他記錄的[date_2]進行比較。數據看起來是這樣的:
[id] | [order] | [date_1] | [date_2] |
--------------------------------------
A | 1 | 1/1 | 1/30 |
A | 2 | 1/5 | 1/5 |
A | 3 | 1/7 | 1/8 |
A | 4 | 1/9 | 1/9 |
-------------------------------------
B | 1 | 3/7 | 3/10 |
B | 2 | 4/1 | 4/9 |
--------------------------------------
雖然這可以通過每個唯一值[ID]循環,然後通過每個唯一值[爲了]循環來完成,記錄數(5-10萬)證明該方法極其緩慢且資源密集。我想知道是否有一種更有效的方法來簡單地遍歷[order]值,然後同時計算每個記錄的這個操作。
正如我所說的,我是新來的R,所以我不是萬能的確定確切的語法,但我正在想象這樣的事情:
for x = 1/max(order){
df$episode_start <- 1 if df$date_1 - df$date_2[id == df$id & order == x] > 1
}
我可以提供更多的細節這個項目的總體目標是否有用。簡而言之,這些數據是醫院記錄,目標是確定開始一個新細分的記錄,該記錄被定義爲在入院後1天內沒有事先解除的相遇。數據變得棘手,因爲存在重疊的記錄(例如,如果病人是長期護理的住院病人,並且不得不去門診就診到急診室) - 在上面的例子中,A2和A3看起來像是基於先前記錄的出院日期[日期2]新的遭遇,但是A2,A3和A4都A1的跨度中發生的,所以結果應該是這樣的:
[id] | [order] | [date_1] | [date_2] | [episode_start]
------------------------------------------------------
A | 1 | 1/1 | 1/30 | 1
A | 2 | 1/5 | 1/5 | 0
A | 3 | 1/7 | 1/8 | 0
A | 4 | 1/9 | 1/9 | 0
-----------------------------------------------------
B | 1 | 3/7 | 3/10 | 1
B | 2 | 4/1 | 4/9 | 1
------------------------------------------------------
在此先感謝。任何幫助或方向非常感謝。注意:我主要在Stata工作,並試圖使用-bysort-命令來做類似的事情,但無濟於事。也許以爲R更適合這個。使用任一方式打開建議。
如果你要問的Stata過,這是樂觀的假設,人們將閱讀一個長期以R爲中心的問題,然後翻譯。有兩個人都很流利,但你在這方面的成功機率很低。我建議刪除Stata標籤,並提一提Stata提出的單獨Stata問題,如果您同時尋求Stata建議。當然,我不反對R的問題,但無法解決這個問題。 –