对于那些我只需要数据集来保持观察的对象,我正在用ggmap绘制纵向线图,每个对象恰好有两个非NA的时间点(前后).因为有五个不同的"测试",所以应该允许一个受试者在测试1中有两个时间点Nonna,但在测试2中有两个NA,只要每个测试的subjectID对都是相等的(因 for each 曲线图都是在后面单独绘制的).

为了过滤掉这一点,我试过了.

dat_all%>%
group_by(SubjectID) %>% 
filter(sum(!is.na(Test1 & Test2 & ...))==2)

dat_all%>%
group_by(SubjectID) %>% 
filter(!any(is.na(c(Test1, Test2, ...)))) %>%
filter(any(Time %in% "Post")) %>%
filter(any(Time %in% "Pre"))

dat_all%>%
group_by(SubjectID, Timepoint) %>% 
filter(!any(is.na(c(Test1, Test2, ...)))) %>%

Each subject has variable amount of timepoints and NAs. All solutions omit either all na (e.g. like complete cases) 或 only retain non_NA pairs per subjects f或 all variables together (s或t of as if the timepoint argument is ign或ed in: group_by(SubjectID, Timepoint)).

我能做什么?

P.S.:S或ry f或 not providing a reproduciable example, the data. Not sure where to find a dataset like that.

推荐答案

我们可以使用if_all-在按‘SubjectID’分组之后,循环遍历if_all中的‘Test’列,分别提取‘time’值为‘Post’和‘Pre’的每一列的值,用!is.na判断非NA,用sum获得逻辑向量上的非NA的计数,判断‘Pre’、‘Post’计数非NA是否相同(==),只有当所有Test列从先前的比较中返回TRUE时,if_all才返回TRUE,因此filter只对所有‘TEST’列具有相同配对的非NA计数的那些组

library(dplyr)
dat_all%>%
group_by(SubjectID) %>%
filter(if_all(starts_with("Test"),  ~ 
              sum(!is.na(.x[Time %in% "Post"])) ==
              sum(!is.na(.x[Time %in% "Pre"])))) %>%
 ungroup

R相关问答推荐

通过绘图 Select 线串几何体并为其着色

在边界外添加注释或标题

R创建一个数据透视表,计算多个组的百分比

如何将在HW上运行的R中的消息(错误、警告等)作为批处理任务输出

为什么st_join(ob1,ob2,left = True)返回具有比ob1更多功能的sf对象?

如何对数据集进行逆向工程?

矩阵%*%矩阵中的错误:需要数字/复杂矩阵/向量参数

如何使用R对每组变量进行随机化?

使用tidy—select创建一个新的带有mutate的摘要变量

二维样条,严格以一个参数递增

错误:非常长的R行中出现意外符号

矩阵的堆叠条形图,条形图上有数字作为标签

如何在R中描绘#符号?

如何删除最后一个可操作对象

如何在R中通过多个变量创建交叉表?

R+reprex:在呈现R标记文件时创建可重现的示例

如何在R中创建这些列?

有没有办法将勾选/审查标记添加到R中的累积关联图中?

使用一个标签共享多个组图图例符号

使用nls()函数的非线性模型的半正态图