這是我的最小資料集:
df=structure(list(ID = c(3942504L, 3199413L, 1864266L, 4037617L,
2030477L, 1342330L, 5434070L, 3200378L, 4810153L, 4886225L),
MI_TIME = c(1101L, 396L, 1140L, 417L, 642L, 1226L, 1189L,
484L, 766L, 527L), MI_Status = c(0L, 0L, 1L, 0L, 0L, 0L,
0L, 0L, 1L, 0L), Stroke_status = c(1L, 0L, 1L, 0L, 0L, 0L,
0L, 1L, 1L, 0L), Stroke_time = c(1101L, 396L, 1140L, 417L,
642L, 1226L, 1189L, 484L, 766L, 527L), Arrhythmia_status = c(NA,
NA, TRUE, NA, NA, TRUE, NA, NA, TRUE, NA), Arrythmia_time = c(1101L,
356L, 1122L, 7L, 644L, 126L, 118L, 84L, 76L, 5237L)), row.names = c(NA,
10L), class = "data.frame")
如您所見,我主要有兩種型別的變數“_status”和“_time”。
我正在準備我的資料集以進行生存分析,“時間”是以天為單位的時間。
但是,當我嘗試創建一個名為“任何心血管結果”的變數時,問題就來了,(df$CV)我將其定義如下:
df$CV = NA
df$CV <- with(df, ifelse(MI_Status=='1' | Stroke_status=='1' | Arrhythmia_status== 'TRUE' ,'1', '0'))
df$CV = as.factor(df$CV)
我遇到的問題是選擇最佳的活動時間。現在我有一個名為 的新變數df$CV,但有 3 個不同的“_time”變數。所以我想創建一個新列,稱為df$CV_time時間,是最先發生的事件的時間。不過這個問題有一點困難,我舉個例子:
如果我們有一個主題MI_status==1,Arrythmia_status==NA,stroke_status==1和MI_time==200,Arrythmia_time==100,stroke_time==220- >正確的時間df$CV將是200,因為它是最早的事件的時間。
然而,在一個情況下MI_status==0,Arrythmia_status==NA,stroke_status==0和MI_time==200,Arrythmia_time==100,stroke_time==220- >正確的時間df$CV將是220,因為它是時間的最新跟進的是220天。
如何根據這些條件為 df$CV 選擇最佳數字?
uj5u.com熱心網友回復:
這可能是一種使用tidyverse.
首先,您可能希望確保列名與拼寫和大小寫一致(此處使用rename)。
然后,您可以將“心律失常”結果明確定義為TRUE或FALSE(而不是使用NA)。
你可以把你的資料為長形式pivot_longer,然后group_by你的ID。您可以在此處包括與 MI、中風和心律失常相關的特定列(其中有“時間”和“狀態”列可用)。請注意,在您的實際資料集中(您使用的地方glimpse- 不清楚您想要什么來治療心律失常 - 有一個 pif 列名稱,但沒有具體的時間或狀態)。
您的心血管結果將包括 MI 或中風狀態為 1,或心律失常狀態為 1 TRUE。
發生事件的min時間將是有心血管結果的時間,否則使用最近隨訪的刪失時間或max時間。
讓我知道這是否為您提供了所需的輸出。
library(tidyverse)
df %>%
rename(MI_time = MI_TIME, MI_status = MI_Status, Arrhythmia_time = Arrythmia_time) %>%
replace_na(list(Arrhythmia_status = F)) %>%
pivot_longer(cols = c(starts_with("MI_"), starts_with("Stroke_"), starts_with("Arrhythmia_")),
names_to = c("event", ".value"),
names_sep = "_") %>%
group_by(ID) %>%
summarise(
any_cv_outcome = any(status[event %in% c("MI", "Stroke")] == 1 | status[event == "Arrhythmia"]),
cv_time_to_event = ifelse(any_cv_outcome, min(time), max(time))
)
輸出
ID any_cv_outcome cv_time_to_event
<int> <lgl> <int>
1 1342330 TRUE 126
2 1864266 TRUE 1122
3 2030477 FALSE 644
4 3199413 FALSE 396
5 3200378 TRUE 84
6 3942504 TRUE 1101
7 4037617 FALSE 417
8 4810153 TRUE 76
9 4886225 FALSE 5237
10 5434070 FALSE 1189
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/405548.html
標籤:
上一篇:3個資料集在R中結合為1個條件
下一篇:Python中資料框列的條件總和
