使用循环过滤

时间:2017-11-19 16:52:15

标签: r loops

我正在使用编程语言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))
}

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

在这里添加这个作为对Steven发布的调整。按row_number()== 1过滤将按第一行过滤,而不是按最小值过滤。如果组中的第一行是最大的,它仍将保留该行。为了按最小值过滤,请执行以下操作。

mydata %>%
    group_by(ID) %>%
    filter(t == min(t)) %>%
    ungroup()