R 纵向数据:试图确定受试者是否有随访

R 纵向数据:试图确定受试者是否有随访,r,longitudinal,R,Longitudinal,我试图分析纵向数据。每个科目至少有一次,最多3次。我需要比较不同就诊的得分,看看他们的治疗是否有助于减轻症状 现在,我想设置一些列,指示受试者是否有随访 一列指示受试者是否第二次就诊,另一列指示受试者是否第三次就诊 我的数据集是什么样子的 我试着编码什么 使用sapply按受试者ID循环浏览所有就诊,如果受试者有第二次就诊和第三次就诊,则填充列 我还尝试了for循环,但在每种情况下,我都不确定如何告诉它循环该主题的所有实例,然后选择要比较的项目(即是否存在安全的就诊号码) 我打算使用类似的逻辑来

我试图分析纵向数据。每个科目至少有一次,最多3次。我需要比较不同就诊的得分,看看他们的治疗是否有助于减轻症状

现在,我想设置一些列,指示受试者是否有随访

一列指示受试者是否第二次就诊,另一列指示受试者是否第三次就诊

我的数据集是什么样子的 我试着编码什么 使用sapply按受试者ID循环浏览所有就诊,如果受试者有第二次就诊和第三次就诊,则填充列

我还尝试了for循环,但在每种情况下,我都不确定如何告诉它循环该主题的所有实例,然后选择要比较的项目(即是否存在安全的就诊号码)

我打算使用类似的逻辑来检查每个受试者,并比较他们的症状。比较第1次就诊和第2次就诊,然后比较第2次就诊和第3次就诊

资料
dat我不想一蹴而就,而是首先确定受试者是否有第二次(或第三次)就诊,然后使用该数据添加一列

要做第一件事:

subj_2_vist <- dat$subject_id[dat$visit_number==2]

通过更改第一部分中的支票,可以将相同的支票用于三次就诊

我不想一蹴而就,而是先确定受试者是否有第二次(或第三次)就诊,然后使用该数据添加一列

要做第一件事:

subj_2_vist <- dat$subject_id[dat$visit_number==2]

通过更改第一部分中的支票,可以将相同的支票用于三次就诊

由于您反复重复相同的任务,因此您可以创建一个函数来完成该工作,然后在运动部件上循环

dat <- read.table(header = TRUE, stringsAsFactors = FALSE,
text = "visit_id  subject_id   visit_number
1         Subject1         1
3         Subject1         2
5         Subject1         3
2         Subject2         1
6         Subject2         2
4         Subject3         1")
制作一些测试用例以确保它正常工作

with(dat, f(subject_id, visit_number, 1))
# [1] "yes" "yes" "yes" "yes" "yes" "yes"
with(dat, f(subject_id, visit_number, 2))
# [1] "yes" "yes" "yes" "yes" "yes" "no" 
with(dat, f(subject_id, visit_number, 3))
# [1] "yes" "yes" "yes" "no"  "no"  "no" 
然后决定你需要循环什么。您还可以在数据帧中一次性为每个循环迭代指定新列:

idx <- 2:3

dat[, paste0('followup', idx)] <- lapply(idx, function(x)
  f(dat$subject_id, dat$visit_number, x))

#   visit_id subject_id visit_number followup2 followup3
# 1        1   Subject1            1       yes       yes
# 2        3   Subject1            2       yes       yes
# 3        5   Subject1            3       yes       yes
# 4        2   Subject2            1       yes        no
# 5        6   Subject2            2       yes        no
# 6        4   Subject3            1        no        no

idx由于您一遍又一遍地重复相同的任务,因此您可以创建一个函数来完成工作,然后在运动部件上循环

dat <- read.table(header = TRUE, stringsAsFactors = FALSE,
text = "visit_id  subject_id   visit_number
1         Subject1         1
3         Subject1         2
5         Subject1         3
2         Subject2         1
6         Subject2         2
4         Subject3         1")
制作一些测试用例以确保它正常工作

with(dat, f(subject_id, visit_number, 1))
# [1] "yes" "yes" "yes" "yes" "yes" "yes"
with(dat, f(subject_id, visit_number, 2))
# [1] "yes" "yes" "yes" "yes" "yes" "no" 
with(dat, f(subject_id, visit_number, 3))
# [1] "yes" "yes" "yes" "no"  "no"  "no" 
然后决定你需要循环什么。您还可以在数据帧中一次性为每个循环迭代指定新列:

idx <- 2:3

dat[, paste0('followup', idx)] <- lapply(idx, function(x)
  f(dat$subject_id, dat$visit_number, x))

#   visit_id subject_id visit_number followup2 followup3
# 1        1   Subject1            1       yes       yes
# 2        3   Subject1            2       yes       yes
# 3        5   Subject1            3       yes       yes
# 4        2   Subject2            1       yes        no
# 5        6   Subject2            2       yes        no
# 6        4   Subject3            1        no        no
idx
with(dat, f(subject_id, visit_number, 1))
# [1] "yes" "yes" "yes" "yes" "yes" "yes"
with(dat, f(subject_id, visit_number, 2))
# [1] "yes" "yes" "yes" "yes" "yes" "no" 
with(dat, f(subject_id, visit_number, 3))
# [1] "yes" "yes" "yes" "no"  "no"  "no" 
idx <- 2:3

dat[, paste0('followup', idx)] <- lapply(idx, function(x)
  f(dat$subject_id, dat$visit_number, x))

#   visit_id subject_id visit_number followup2 followup3
# 1        1   Subject1            1       yes       yes
# 2        3   Subject1            2       yes       yes
# 3        5   Subject1            3       yes       yes
# 4        2   Subject2            1       yes        no
# 5        6   Subject2            2       yes        no
# 6        4   Subject3            1        no        no