r - 从数据框中有条件地选择重复测量
问题描述
我有在可变数量的时间点对每个受试者(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))
解决方案
我们可以arrange
为每个组选择第一次出现的时间id
和之间的最小绝对值。由于我们已经安排了它,因此将首先选择较低的值(在平局的情况下)。timepoint
timepoint == 0
4 - timepoint
timepoint
which.min
timepoint
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
推荐阅读
- calendar - 有什么方法可以更新 GitLab 日历以指示周数?
- mongodb - MongoDB(猫鼬):转换为 [string] 失败
- arrays - 如何使用matlab在netcdf文件中所需的变量值级别内制作空间图
- vba - 如何优化vba中的连接
- python - 如何获取列表中一对字典的所有值的列表,每个字典都有不同的键?
- karate - 无法在空手道 maven 项目的另一个模块中调用实用程序
- javascript - 使用 React 测试库测试滚动事件
- javascript - 如何从 onClick 事件中调用组件
- postgresql - PostgreSQL:使用正则表达式的条件 where 子句不起作用
- ruby - 查找两个数组之间的精确值重叠