我有一个包含ID号、日期和测试结果的数据集,并且需要创建一个最终数据集,其中每一行都包含一个唯一的ID、日期和测试结果值。如何根据ID和日期查找重复项,然后根据特定的测试结果值保留行?
df <- data.frame(id_number = c(1, 1, 2, 2, 3, 3, 3, 4),
date = c('2021-11-03', '2021-11-19', '2021-11-11', '2021-11-11', '2021-11-05', '2021-11-05', '2021-11-16', '2021-11-29'),
result = c(0,1,0,0,0,9,0,9) )
id_number date result
<dbl> <chr> <dbl>
1 1 2021-11-03 0
2 1 2021-11-19 1
3 2 2021-11-11 0
4 2 2021-11-11 0
5 3 2021-11-05 0
6 3 2021-11-05 9
7 3 2021-11-16 0
8 4 2021-11-29 9
df <- unique(df)在使用了唯一的函数之后,仍然会留下重复的id_number和date行,以及不同的测试结果。其中,我只需要保留等于0或1的行,并排除任何9s。
在下面的例子中,我希望保留第4行,排除第5行。我不能简单地排除row =9的行,因为我想为任何非重复的观测保留这些行。
id_number date result
<dbl> <chr> <dbl>
1 1 2021-11-03 0
2 1 2021-11-19 1
3 2 2021-11-11 0
4 3 2021-11-05 0
5 3 2021-11-05 9
6 3 2021-11-16 0
7 4 2021-11-29 9发布于 2022-03-07 19:01:17
你可以:
library(tidyverse)
df %>%
group_by(id_number, date) %>%
filter(!(result == 9 & row_number() > 1)) %>%
ungroup()
# A tibble: 6 x 3
id_number date result
<dbl> <chr> <dbl>
1 1 2021-11-03 0
2 1 2021-11-19 1
3 2 2021-11-11 0
4 3 2021-11-05 0
5 3 2021-11-16 0
6 4 2021-11-29 9发布于 2022-03-07 19:46:04
为便于理解,请使用:
( a)与9行不同的行:
df <- subset(df,df$result != 9)然后
( b)删除重复的:
df <- subset(df, duplicated(df)==FALSE)因此,如果您想要特定的列:
df <- subset(df,duplicated(df$result)==FALSE)或者:
df <- subset(df,duplicated(df[ ,2:3])==FALSE)https://stackoverflow.com/questions/71385935
复制相似问题