首页 > 解决方案 > 从数据框中有条件地选择重复测量

问题描述

我有在可变数量的时间点对每个受试者(id)进行重复测量的数据。我想为每个主题保留两行,时间点 == 0 和最接近 4 的时间点。在两个候选时间点距离 4 等距的行的情况下,例如 (3, 5),我想选择最低的 (3 )。

如下图的“选择”列所示,带有“x”的行将不会被保留。

 dat <- structure(list(id = c(172507L, 172507L, 172507L, 172525L, 172525L, 
172525L, 172526L, 172526L, 172526L, 172527L, 172527L, 172527L, 
172527L, 172527L), timepoint = c(0L, 2L, 6L, 0L, 4L, 5L, 0L, 
5L, 2L, 2L, 3L, 5L, 6L, 0L)), class = "data.frame", row.names = c(NA, 
-14L))

在此处输入图像描述

标签: rdplyrdata.table

解决方案


我们可以arrange为每个组选择第一次出现的时间id和之间的最小绝对值。由于我们已经安排了它,因此将首先选择较低的值(在平局的情况下)。timepointtimepoint == 04 - timepointtimepoint which.mintimepoint

library(dplyr)
dat %>%
  arrange(id, timepoint) %>%
  group_by(id) %>%
  slice(c(which.max(timepoint == 0), which.min(abs(4- timepoint))))

#     id timepoint
#   <int>     <int>
#1 172507         0
#2 172507         2
#3 172525         0
#4 172525         4
#5 172526         0
#6 172526         5
#7 172527         0
#8 172527         3

推荐阅读