我正在使用编程语言R处理重复测量数据帧mydata
,其第一行看起来像这样:
ID t Variable_X
100096 0.0 0
100096 1.0 0
100026 0.0 1
100026 1.0 0
100036 0.0 0
100036 0.5 0
100036 1.0 0
100038 0.5 0
100041 0.0 0
100041 0.5 0
100041 1.0 0
100041 2.0 0
100041 3.0 0
100041 3.5 0
100083 0.0 0
如您所见,并非所有受试者(由其唯一ID识别)都在t = 0.0时进行了第一次测量。例如,分配给ID 100038的主题在t 0.5处进行了他的第一次测量;其他主题,不在此处显示,例如在t 2 4 6进行测量。
目的:我要做的是为每个科目保留他的第一次测量。通过应用filter
包中的函数dplyr
,我可以实现个别主题。这是一个例子:
filter(mydata[mydata$ID==100026,],t==min(t))
ID t Variable_X
100026 0.0 1
问题:我想将此作为循环执行,而不必为每个ID手动执行此操作。我已经在名为id_vec
的向量中存储了唯一的ID序列。因此打印id_vec将显示:
100096 100026 100036 100038 100041 100083
我已经尝试了以下代码,但它不起作用:
df<-data.frame(ID=numeric(), t=numeric(), D3=numeric())
for(i in id_vec){
df[i]<-filter(mydata[mydata$ID==i,],t==min(t))
}
非常感谢你的帮助!
答案 0 :(得分:0)
在这里添加这个作为对Steven发布的调整。按row_number()== 1过滤将按第一行过滤,而不是按最小值过滤。如果组中的第一行是最大的,它仍将保留该行。为了按最小值过滤,请执行以下操作。
mydata %>%
group_by(ID) %>%
filter(t == min(t)) %>%
ungroup()