r-使用唯一ID和条件将子集应用于重复测量



我正试图找到一种方法,使用第一个度量的条件语句对我的数据集(个体的重复度量(进行子集或筛选。换句话说,我想过滤数据集,只包括在时间点1出现特定情况的个人的所有时间点的数据。

示例数据:

Puck_Number <- c(1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6)
Date <- as.Date(c('2020-07-29','2020-07-29','2020-07-29','2020-07-29','2020-07-29','2020-07-29','2020-09-07','2020-09-07','2020-09-07','2020-09-07','2020-09-07','2020-09-07','2020-09-22','2020-09-22','2020-09-22','2020-09-22','2020-09-22','2020-09-22'))
Bleached <- c(1,0,1,1,0,1,1,0,1,1,0,1,0,0,0,1,0,1)
Alive <- c(1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1)
Data <- data.frame(Puck_Number, Date, Bleached, Alive)

这将产生以下内容:

Puck_Number       Date Bleached Alive
1            1 2020-07-29        1     1
2            2 2020-07-29        0     1
3            3 2020-07-29        1     1
4            4 2020-07-29        1     1
5            5 2020-07-29        0     1
6            6 2020-07-29        1     1
7            1 2020-09-07        1     1
8            2 2020-09-07        0     1
9            3 2020-09-07        1     1
10           4 2020-09-07        1     1
11           5 2020-09-07        0     0
12           6 2020-09-07        1     1
13           1 2020-09-22        0     0
14           2 2020-09-22        0     1
15           3 2020-09-22        0     0
16           4 2020-09-22        1     1
17           5 2020-09-22        0     0
18           6 2020-09-22        1     1

我想通过过滤或子集化包括的只是在"2020-07-29"日期期间漂白列中有1的那些,以及对整个数据集的这些个体的重复测量。

所以我正在寻找这样的数据:

Puck_Number       Date Bleached Alive
1            1 2020-07-29        1     1
3            3 2020-07-29        1     1
4            4 2020-07-29        1     1
6            6 2020-07-29        1     1
7            1 2020-09-07        1     1
9            3 2020-09-07        1     1
10           4 2020-09-07        1     1
12           6 2020-09-07        1     1
13           1 2020-09-22        0     0
15           3 2020-09-22        0     0
16           4 2020-09-22        1     1
18           6 2020-09-22        1     1

冰球号码是每个人的唯一标识符(每次测量都重复(,我怀疑它可能有助于过滤,但我还没有找到用我现有的R技能来实现这一点的方法。

试试这个

with(Data, Data[Puck_Number %in% Puck_Number[Date == as.Date("2020-07-29") & Bleached], ])

输出

Puck_Number       Date Bleached Alive
1            1 2020-07-29        1     1
3            3 2020-07-29        1     1
4            4 2020-07-29        1     1
6            6 2020-07-29        1     1
7            1 2020-09-07        1     1
9            3 2020-09-07        1     1
10           4 2020-09-07        1     1
12           6 2020-09-07        1     1
13           1 2020-09-22        0     0
15           3 2020-09-22        0     0
16           4 2020-09-22        1     1
18           6 2020-09-22        1     1

或者一种不同的

library(tidyverse)
subset <- Data %>% filter(Date == as.Date("2020-07-29", format = "%Y-%m-%d") & Bleached == 1) %>%
select(Puck_Number) %>% left_join(Data)
> subset
Puck_Number       Date Bleached Alive
1            1 2020-07-29        1     1
2            3 2020-07-29        1     1
3            4 2020-07-29        1     1
4            6 2020-07-29        1     1
5            1 2020-09-07        1     1
6            3 2020-09-07        1     1
7            4 2020-09-07        1     1
8            6 2020-09-07        1     1
9            1 2020-09-22        0     0
10           3 2020-09-22        0     0
11           4 2020-09-22        1     1
12           6 2020-09-22        1     1

最新更新