我有一个关于纵向研究分析和与R合作的问题。
我有以下数据格式:
ID Visit Behaviour Distance_to_first_visit_in_month
1 0 1 0
1 1 1 6
1 2 1 12
1 3 1 50
2 0 3 0
2 1 3 8
2 2 3 16
2 3 3 25
2 4 3 40
2 5 3 60
3 0 1 0
3 1 1 6
3 2 1 12
3 3 3 24
3 4 3 30
3 5 3 55
我需要以下格式的数据:
ID Visit Behaviour Distance_to_first_visit_in_month Status
1 0 1 0 0
2 0 3 0 1
3 3 3 24 1
如果一个人每次都有1,直到最后,他应该只被审查,因为研究已经完成。如果一个人第一次有 3,我需要Distance_to_to_first_visit_in_month,因为他在 Kapplan-Meyer 曲线中具有状态 1。
我试图过滤最大Distance_to_first_visit_in_month并获得行为。当我将数据转换为宽格式时,很容易获得这些数据。但是我无法得到Distance_to_first_visit_in_month当人 3 作为行为开始时或其他时间。
我有 300 个 ID,有时有 11 次访问,所以我无法准备数据手册。
你有想法吗?
提前谢谢你。 最佳克里斯蒂娜
由于您不解释如何将数据聚合到第二个数据集,因此我只能向您展示如何获取符合您条件的 ID 以及如何实现状态变量。请参阅此示例:
library(dplyr)
# get id's with only 1
id_list1 <- lapply(df %>% split(.$ID),function(x){
if(unique(x$ID)==1){
return(unique(x$ID))
}
}) %>%
unlist()
# get id's with 3 as first value
id_list3 <- lapply(df %>% split(.$ID),function(x){
if(x[x$Visit==0,"Behaviour"]==3){
return(unique(x$ID))
}
}) %>%
unlist()
df %>%
mutate(Status = ifelse(ID %in% id_list3,1,0)) %>%
mutate(new_dist = ifelse(!ID %in% id_list3,Distance_to_first_visit_in_month,NA))
请注意,您将在id_list1
和id_list3
中获得命名向量。没有重复项,只有与元素匹配的元素名称。
你的意思是用"开头"访问编号 0 吗?否则,您将不得不调整x$Visit==0
。