在R Studio中删除多行中的未完成案例 [英] Deleting incomplete cases across multiple rows in R studio
本文介绍了在R Studio中删除多行中的未完成案例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有一个纵向数据集,如下所示
ID <- c(1, 1, 2, 2, 3, 3, 4, 4)
time <- c(1, 2, 1, 2, 1, 2, 1, 2)
value <- c(7, 5, 9, 2, NA, 3, 7, NA)
mydata <- data.frame(ID, time, value)
ID time value
1 1 1 7
2 1 2 5
3 2 1 9
4 2 2 2
5 3 1 NA
6 3 2 3
7 4 1 7
8 4 2 NA
在这个数据集中,我们有4个病例具有两个时间点的数据(比方说治疗前和治疗后)
我要做的是设置条件以删除两个时间点未完成的任何案例。在本例中,我想删除ID3(缺少时间点1)和ID4(缺少时间点2)。如下所示:
ID time value
1 1 1 7
2 1 2 5
3 2 1 9
4 2 2 2
我运气不太好。我尝试了Complete.case()或Which()的变体,但都无济于事
我对R还很陌生,如果有人能帮我解决问题,我将不胜感激
编辑:感谢罗纳克回答我的问题。在反思我的真实数据后,我遇到了第二个问题。我的实际数据更多地反映在下面:
ID <- c(1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 8)
time <- c(1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1)
value <- c(7, 5, 9, 2, NA, 3, 7, NA, 8, 9, 7, 6)
mydata <- data.frame(ID, time, value)
ID time value
1 1 1 7
2 1 2 5
3 2 1 9
4 2 2 2
5 3 1 NA
6 3 2 3
7 4 1 7
8 4 2 NA
9 5 1 8
10 6 1 9
11 7 1 7
12 8 1 6
我还希望删除案例5、6、7和8的位置。这些ID具有时间%1的条目,但没有时间%2的条目。希望这有意义
谢谢一堆
推荐答案
如果您将数据切换为宽格式(其中每个时间点表示为其自己的列),则可以使用na.omit
。使用dplyr
和tidyr
函数:
library(dplyr)
mydata <- mydata %>%
tidyr::spread(key=time, value=value) %>% # reformat to wide
na.omit() %>% # delete cases with missingness on any variable (i.e. any time point)
tidyr::gather(key="time", value="value", -ID) # put it back in long format
> mydata
ID time value
1 1 1 7
2 2 1 9
3 1 2 5
4 2 2 2
请注意,这将起作用(它将只保留时间1和时间2的完整数据的案例),即使数据中缺少一个时间点,但没有明确的NA,如下所示:
> mydata
ID time value
1 1 1 7
2 1 2 5
3 2 1 9
4 2 2 2
5 3 1 NA
6 3 2 3
7 4 1 7
8 4 2 NA
9 5 1 8
10 6 1 9
11 7 1 7
12 8 1 6
这篇关于在R Studio中删除多行中的未完成案例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文