R:添加重复行,其中日期更改一天,返回到设置的日期
我有一个大数据框(df),其中“DateTime”定义了每只动物(1-2)的事件发生时间(event=1),它有许多与之相关的其他变量(例如变量)。我想为Cox比例风险分析设置这些数据,并需要适当延长数据集 对于每种动物,我想为所有鸟类的一个设定日期(本例中为9/27)每天创建一个新的重复行。所有其他变量将保持与输入相同,但“Event”除外,它仅在新行中为零 最近一直在学习tidyverse,但老实说,不知道从哪里开始 输入: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 <- 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
Atidyverse
选项:
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
Atidyverse
选项:
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
太好了。谢谢,我今天晚些时候会处理这个问题,并确保我理解它,但它确实有效。太好了。谢谢,我今天晚些时候会处理这个问题,并确保我理解它,但它确实有效。谢谢-必须更新软件包,但现在也有效。谢谢-必须更新软件包,但现在也有效。