gpt4 book ai didi

r - 如何使用 difftime 计算前一行值的天数差异?

转载 作者:行者123 更新时间:2023-12-01 12:50:15 24 4
gpt4 key购买 nike

下面的代码创建数据:

enter image description here

idCol <- c('1','1','1','2','2','3','3')
rowNumIdCol <- c('1','2','3','4','5','6','7')
stepCol <- c('step1')
step1Col <- c('30-12-2010:11.02', '31-12-2010:10.06', '01-01-2011:15.12','01-03-2017:09.00', '01-05-2017:09.00', '01-06-2017:09.00', '01-07-2017:09.00')
mydata <- data.frame(idCol , rowNumIdCol , step1Col)
colnames(mydata) <- c('id' , 'rowNumId' , 'step1')

我正在尝试使用以下方法按 id 计算连续行之间的天数差异:

library(dplyr)
library(lubridate)
mydata %>%
group_by(id) %>%
mutate(DaysSpent = as.numeric(difftime(dmy_hm(step1)[row_number],
dmy_hm(step1)[row_number()+1], units = 'days')))

但是返回错误:

Error in mutate_impl(.data, dots) : 
Evaluation error: invalid subscript type 'closure'.

要按 id 计算天数之间的累积差异,可以使用:

mydata %>% 
group_by(id) %>%
mutate(DaysSpent = as.numeric(difftime(dmy_hm(step1),
dmy_hm(step1)[1], units = 'days')))

如何计算前一行之间的天数差异?

我认为我需要访问当前行和上一行作为 mutate 的一部分?

更新:每个 id 的行数是可变的。

最佳答案

使用data.table,这可以通过shift来完成:

library(data.table)

setDT(mydata)[, DaysSpent := difftime(dmy_hm(step1), dmy_hm(shift(step1, type = "lag")), units = "days"), by = id]

# id rowNumId step1 DaysSpent
#1: 1 1 30-12-2010:11.02 NA days
#2: 1 2 31-12-2010:10.06 0.9611111 days
#3: 1 3 01-01-2011:15.12 1.2125000 days
#4: 2 4 01-03-2017:09.00 NA days
#5: 2 5 01-05-2017:09.00 61.0000000 days
#6: 3 6 01-06-2017:09.00 NA days
#7: 3 7 01-07-2017:09.00 30.0000000 days

关于r - 如何使用 difftime 计算前一行值的天数差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47001923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com