R:添加重复行,其中日期更改一天,返回到设置的日期

R:添加重复行,其中日期更改一天,返回到设置的日期,r,datetime,dplyr,duplicates,R,Datetime,Dplyr,Duplicates,我有一个大数据框(df),其中“DateTime”定义了每只动物(1-2)的事件发生时间(event=1),它有许多与之相关的其他变量(例如变量)。我想为Cox比例风险分析设置这些数据,并需要适当延长数据集 对于每种动物,我想为所有鸟类的一个设定日期(本例中为9/27)每天创建一个新的重复行。所有其他变量将保持与输入相同,但“Event”除外,它仅在新行中为零 最近一直在学习tidyverse,但老实说,不知道从哪里开始 输入: df <- data.frame(DateTime = Da

我有一个大数据框(df),其中“DateTime”定义了每只动物(1-2)的事件发生时间(event=1),它有许多与之相关的其他变量(例如变量)。我想为Cox比例风险分析设置这些数据,并需要适当延长数据集

对于每种动物,我想为所有鸟类的一个设定日期(本例中为9/27)每天创建一个新的重复行。所有其他变量将保持与输入相同,但“Event”除外,它仅在新行中为零

最近一直在学习tidyverse,但老实说,不知道从哪里开始

输入:

df <- data.frame(DateTime = DateTime, Event = 1, Animal = 1:2, Variable = c(2.4, 1.5))
df

             DateTime Event Animal Variable
1 2019-10-01 20:21:12     1      1      2.4
2 2019-09-29 20:42:20     1      2      1.5

df在base R中执行此操作的一种方法是为
DateTime
列中的每个日期创建日期序列。此序列将充当新数据帧的DateTime列(原始数据帧的每行一个新数据帧)。从那里构建其他字段将非常简单

我们可以在一个列表中创建这些数据帧,然后
rbind
将它们全部组合在一起以获得结果。例如:

DF212019-09-2720:21:12012.4
#> 2 2019-09-28 20:21:12     0      1      2.4
#> 3 2019-09-29 20:21:12     0      1      2.4
#> 4 2019-09-30 20:21:12     0      1      2.4
#> 5 2019-10-01 20:21:12     1      1      2.4
#> 6 2019-09-27 20:42:20     0      2      1.5
#> 7 2019-09-28 20:42:20     0      2      1.5
#> 8 2019-09-29 20:42:20     1      2      1.5

在base R中执行此操作的一种方法是在
DateTime
列中为每个日期创建日期序列。此序列将充当新数据帧的DateTime列(原始数据帧的每行一个新数据帧)。从那里构建其他字段将非常简单

我们可以在一个列表中创建这些数据帧,然后
rbind
将它们全部组合在一起以获得结果。例如:

DF212019-09-2720:21:12012.4
#> 2 2019-09-28 20:21:12     0      1      2.4
#> 3 2019-09-29 20:21:12     0      1      2.4
#> 4 2019-09-30 20:21:12     0      1      2.4
#> 5 2019-10-01 20:21:12     1      1      2.4
#> 6 2019-09-27 20:42:20     0      2      1.5
#> 7 2019-09-28 20:42:20     0      2      1.5
#> 8 2019-09-29 20:42:20     1      2      1.5

A
tidyverse
选项:

library(tidyverse)

initDate <- as.Date('2019-09-27')

df %>%
  mutate(daysSince = as.integer(as.Date(DateTime) - initDate) + 1L) %>%
  uncount(daysSince) %>%
  group_by(across(-Event)) %>%
  mutate(DateTime = paste((as.Date(DateTime) - rev(1:n())) + 1L, format(DateTime, '%H:%M:%S')),
         Event = replace(Event, row_number() != n(), 0L)
  )
库(tidyverse)
起始日期%
mutate(daysSince=as.integer(as.Date(DateTime)-initDate)+1L)%>%
未计数(日数)%>%
分组依据(跨(-Event))%>%
mutate(DateTime=paste((as.Date(DateTime)-rev(1:n())+1L,格式(DateTime,“%H:%M:%S”),
事件=替换(事件,行号()!=n(),0L)
)
输出:

# A tibble: 8 x 4
# Groups:   DateTime, Animal, Variable [8]
  DateTime            Event Animal Variable
  <chr>               <dbl>  <int>    <dbl>
1 2019-09-27 20:21:12     0      1      2.4
2 2019-09-28 20:21:12     0      1      2.4
3 2019-09-29 20:21:12     0      1      2.4
4 2019-09-30 20:21:12     0      1      2.4
5 2019-10-01 20:21:12     1      1      2.4
6 2019-09-27 20:42:20     0      2      1.5
7 2019-09-28 20:42:20     0      2      1.5
8 2019-09-29 20:42:20     1      2      1.5
#一个tible:8 x 4
#组:日期时间、动物、变量[8]
日期时间事件动物变量
1 2019-09-27 20:21:12     0      1      2.4
2 2019-09-28 20:21:12     0      1      2.4
3 2019-09-29 20:21:12     0      1      2.4
4 2019-09-30 20:21:12     0      1      2.4
5 2019-10-01 20:21:12     1      1      2.4
6 2019-09-27 20:42:20     0      2      1.5
7 2019-09-28 20:42:20     0      2      1.5
8 2019-09-29 20:42:20     1      2      1.5

A
tidyverse
选项:

library(tidyverse)

initDate <- as.Date('2019-09-27')

df %>%
  mutate(daysSince = as.integer(as.Date(DateTime) - initDate) + 1L) %>%
  uncount(daysSince) %>%
  group_by(across(-Event)) %>%
  mutate(DateTime = paste((as.Date(DateTime) - rev(1:n())) + 1L, format(DateTime, '%H:%M:%S')),
         Event = replace(Event, row_number() != n(), 0L)
  )
库(tidyverse)
起始日期%
mutate(daysSince=as.integer(as.Date(DateTime)-initDate)+1L)%>%
未计数(日数)%>%
分组依据(跨(-Event))%>%
mutate(DateTime=paste((as.Date(DateTime)-rev(1:n())+1L,格式(DateTime,“%H:%M:%S”),
事件=替换(事件,行号()!=n(),0L)
)
输出:

# A tibble: 8 x 4
# Groups:   DateTime, Animal, Variable [8]
  DateTime            Event Animal Variable
  <chr>               <dbl>  <int>    <dbl>
1 2019-09-27 20:21:12     0      1      2.4
2 2019-09-28 20:21:12     0      1      2.4
3 2019-09-29 20:21:12     0      1      2.4
4 2019-09-30 20:21:12     0      1      2.4
5 2019-10-01 20:21:12     1      1      2.4
6 2019-09-27 20:42:20     0      2      1.5
7 2019-09-28 20:42:20     0      2      1.5
8 2019-09-29 20:42:20     1      2      1.5
#一个tible:8 x 4
#组:日期时间、动物、变量[8]
日期时间事件动物变量
1 2019-09-27 20:21:12     0      1      2.4
2 2019-09-28 20:21:12     0      1      2.4
3 2019-09-29 20:21:12     0      1      2.4
4 2019-09-30 20:21:12     0      1      2.4
5 2019-10-01 20:21:12     1      1      2.4
6 2019-09-27 20:42:20     0      2      1.5
7 2019-09-28 20:42:20     0      2      1.5
8 2019-09-29 20:42:20     1      2      1.5

太好了。谢谢,我今天晚些时候会处理这个问题,并确保我理解它,但它确实有效。太好了。谢谢,我今天晚些时候会处理这个问题,并确保我理解它,但它确实有效。谢谢-必须更新软件包,但现在也有效。谢谢-必须更新软件包,但现在也有效。