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开始