R 按ID和日期列出的某些事件的发生情况

R 按ID和日期列出的某些事件的发生情况,r,subset,R,Subset,我有一个如下所示的数据框: <ID> <Event> <Date> 1 Ate 2021-01-01 1 Drank 2021-01-01 1 Ate 2021-02-23 2 Ate 2021-01-02 2 Ran 2021-01-02 2 Ate

我有一个如下所示的数据框:

<ID>     <Event>      <Date>
1         Ate          2021-01-01
1         Drank        2021-01-01
1         Ate          2021-02-23
2         Ate          2021-01-02     
2         Ran          2021-01-02
2         Ate          2021-02-23
3         Drank        2021-01-01
3         Ran          2021-02-23

1 Ate 2021-01-01
1.2021-01-01
1 Ate 2021-02-23
2021年1月2日
2021年1月2日
2021年2月23日
3.2021-01-01
2021年2月23日
我希望确定的是每组ID是否在特定日期发生了事件。在本例中,我想确定每组日期中的哪个ID“Ate”,period

预期结果将是一个如下所示的表:

<ID>     <Event>      <Date>            <Outcome>
1         Ate          2021-01-01       Yes
1         Drank        2021-01-01       Yes
1         Jumped       2021-02-23       No
2         Ate          2021-01-02       Yes
2         Ran          2021-01-02       Yes
2         Ate          2021-02-23       No
3         Drank        2021-01-01       No
3         Ran          2021-02-23       No

1 Ate 2021-01-01是
1.2021-01-01是
2021-02-23第1页
2 Ate 2021-01-02是
2运行2021-01-02是
2 Ate 2021-02-23号
3.2021-01-01编号
3 Ran 2021-02-23号

我希望这是有道理的,谢谢你的帮助

如果我们想检查每个“ID”、“Date”的“Ate”是否与另一个“Event”一起出现,请按“ID”、“Date”进行分组,检查行数(
n()
)是否大于1,并且(
&
)在%“Event”中找到了
%

library(dplyr)
df1 %>% 
  group_by(ID, Date) %>% 
  mutate(Outcome = c("No", "Yes")[(n() > 1 & 'Ate' %in% Event) + 1]) %>%
  ungroup
-输出

# A tibble: 8 x 4
#     ID Event Date       Outcome
#  <int> <chr> <chr>      <chr>  
#1     1 Ate   2021-01-01 Yes    
#2     1 Drank 2021-01-01 Yes    
#3     1 Ate   2021-02-23 No     
#4     2 Ate   2021-01-02 Yes    
#5     2 Ran   2021-01-02 Yes    
#6     2 Ate   2021-02-23 No     
#7     3 Drank 2021-01-01 No     
#8     3 Ran   2021-02-23 No  
数据
df1如果我们想检查每个“ID”、“Date”的“Ate”是否与另一个“Event”一起发生,请按“ID”、“Date”进行分组,检查行数(
n()
)是否大于1,并且(
&
)在%
“Event”中找到了
%

library(dplyr)
df1 %>% 
  group_by(ID, Date) %>% 
  mutate(Outcome = c("No", "Yes")[(n() > 1 & 'Ate' %in% Event) + 1]) %>%
  ungroup
-输出

# A tibble: 8 x 4
#     ID Event Date       Outcome
#  <int> <chr> <chr>      <chr>  
#1     1 Ate   2021-01-01 Yes    
#2     1 Drank 2021-01-01 Yes    
#3     1 Ate   2021-02-23 No     
#4     2 Ate   2021-01-02 Yes    
#5     2 Ran   2021-01-02 Yes    
#6     2 Ate   2021-02-23 No     
#7     3 Drank 2021-01-01 No     
#8     3 Ran   2021-02-23 No  
数据
df1这里有一个
data.table
选项

setDT(df)[,Outcome := c("No","Yes")[1+isTRUE(Date==Date[Event=="Ate"] & .N>1)],.(ID,Date)]
给予

   ID Event       Date Outcome
1:  1   Ate 2021-01-01     Yes
2:  1 Drank 2021-01-01     Yes
3:  1   Ate 2021-02-23      No
4:  2   Ate 2021-01-02     Yes
5:  2   Ran 2021-01-02     Yes
6:  2   Ate 2021-02-23      No
7:  3 Drank 2021-01-01      No
8:  3   Ran 2021-02-23      No

这是一个
数据表
选项

setDT(df)[,Outcome := c("No","Yes")[1+isTRUE(Date==Date[Event=="Ate"] & .N>1)],.(ID,Date)]
给予

   ID Event       Date Outcome
1:  1   Ate 2021-01-01     Yes
2:  1 Drank 2021-01-01     Yes
3:  1   Ate 2021-02-23      No
4:  2   Ate 2021-01-02     Yes
5:  2   Ran 2021-01-02     Yes
6:  2   Ate 2021-02-23      No
7:  3 Drank 2021-01-01      No
8:  3   Ran 2021-02-23      No

嗨,阿克伦,很高兴你在这里事实上你有我见过的关于R的最多答案!从本质上讲,在给定的一天中可以发生一系列事件(吃、跑、喝、跳等)。在某些日子里,可能会发生多个事件。我想确定某一天的活动组中是否发生了“Ate”。谢谢,我在下面发布了一个解决方案。请检查Hi akrun,很高兴你在这里事实上你有我见过的关于R的最多答案!从本质上讲,在给定的一天中可以发生一系列事件(吃、跑、喝、跳等)。在某些日子里,可能会发生多个事件。我想确定某一天的活动组中是否发生了“Ate”。谢谢,我在下面发布了一个解决方案。请检查这是否有效!你能帮我理解下面的语法吗:mutate(output=c(“No”,“Yes”)[(n()>1&'Ate'%in%Event)+1])我有点明白,但是n()>1和+1会让我off@the_witch_dr
(n()>1&“Ate%”在%Event中)
返回一个布尔值(
TRUE/FALSE
),向其中添加1会将TRUE(1)更改为2,FALSE(0)更改为1。它被用作向量c的位置索引
(“否”、“是”)
,即无论我们有2个,它都被替换为“是”,对于1,它被替换为“否”。在
R
中,索引从1开始执行此操作!你能帮我理解下面的语法吗:mutate(output=c(“No”,“Yes”)[(n()>1&'Ate'%in%Event)+1])我有点明白,但是n()>1和+1会让我off@the_witch_dr
(n()>1&“Ate%”在%Event中)
返回一个布尔值(
TRUE/FALSE
),向其中添加1会将TRUE(1)更改为2,FALSE(0)更改为1。它被用作向量c的位置索引
(“否”、“是”)
,即无论我们有2个,它都被替换为“是”,对于1,它被替换为“否”。在
R
中,索引从1开始