我用ggplot制作纵向线形图,对于那些我只需要数据集来保持观察的对象,每个对象正好有两个时间点由于存在五个不同的“测试”,因此应当允许受试者对于测试1具有两个时间点NonNA,但是对于测试2具有两个NA。只要subjectID的对对于每个单独的测试都是相等的(因为每个图稍后单独绘制)。
为了过滤这个,我尝试了例如。
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, ...)))) %>%
每个受试者具有可变数量的时间点和NA。所有解决方案都省略所有na(例如,像完整的情况)或仅保留每个受试者的所有变量的non_NA对(有点像忽略了时间点参数:group_by(SubjectID,Timepoint))。
我能做什么?
P.S.:很抱歉没有提供一个可复制的例子,数据。不知道在哪里可以找到这样的数据集。
1条答案
按热度按时间bq3bfh9z1#
我们可以使用
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计数的那些组执行操作