1

我有一个关于纵向研究分析和与 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 并获得行为。当我将数据转换为宽格式时,很容易获得这些数据。但是当人 3 在开始时或其他情况下,我无法获得 Distance_to_first_visit_in_month。

我有 300 个 ID,有时访问 11 次,所以我无法准备数据手册。

你有想法吗?

提前谢谢你。最好的克里斯蒂娜

4

1 回答 1

0

由于您没有解释如何将数据聚合到第二个数据集,我只能向您展示如何获取与您的条件匹配的 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

于 2019-09-11T12:37:11.747 回答