r中带有datetime的列表元素的循环 r中带有datetime的列表元素的循环
我有一个名字错误的df。我将错误按ID分开。现在列表中有300多个不同的对象r中带有datetime的列表元素的循环 r中带有datetime的列表元素的循环,r,list,loops,datetime,posixlt,R,List,Loops,Datetime,Posixlt,我有一个名字错误的df。我将错误按ID分开。现在列表中有300多个不同的对象 library(dplyr) df <- split.data.frame(mistake, mistake$ID) 结构如下: str(mistake) 'data.frame': 2 obs. of 18 variables: $ Baureihe : int 411 411 $ Verbund : Factor w/ 1 level "ICE1166": 1 1 $ F
library(dplyr)
df <- split.data.frame(mistake, mistake$ID)
结构如下:
str(mistake)
'data.frame': 2 obs. of 18 variables:
$ Baureihe : int 411 411
$ Verbund : Factor w/ 1 level "ICE1166": 1 1
$ Fahrzeug : Factor w/ 7 levels "93805411066-4",..: 7 7
$ Code : Factor w/ 6 levels "1A07","1A0E",..: 3 3
$ Codetext : Factor w/ 6 levels "ITD Karte gestört",..: 5 5
$ Subsystem : Factor w/ 1 level "Neigetechnik": 1 1
$ Kommt.Zeit : Factor w/ 70 levels "02.08.2018 00:07:23",..: 68 6
$ Geht.Zeit : Factor w/ 68 levels "01.08.2018 01:30:25",..: 68 8
$ Anstehdauer : Factor w/ 46 levels "00 Std 00 Min 01 Sek ",..: 12 4
$ Jahr : int 2018 2018
$ Monat : int 7 8
$ KW : Factor w/ 5 levels "KW27","KW28",..: 4 5
$ Tag : int 29 4
$ Wartung.geht: int 0 0
$ datetime : POSIXlt, format: "2018-07-29 23:00:00" "2018-08-04 11:16:00"
$ gehtzeit : POSIXlt, format: "2018-07-29 23:02:00" "2018-08-04 11:19:00"
$ bleiben :Class 'difftime' atomic [1:2] 2 3
.. ..- attr(*, "units")= chr "secs"
$ ID : chr "2018-07-29 23:00:00 2018-07-29 23:02:00 1A50" "2018-08-04 11:16:00 2018-08-04 11:19:00 1A50"
考虑构建一个接收数据帧作为输入参数的通用用户定义函数。然后,通过调用函数。与
split
类似,by
也通过一个或多个因子(如ID)对数据帧进行子集划分,但与split
不同,by
可以将子集传递到函数中。要将所有行绑定在一起,请在末尾运行do.call
下面删除冗余的
df$test,使用与Parfait答案相同的行,并使用相同的用户定义函数calc_datetime
,但我将使用purr
包中的map_dfr
:
df_list <- split(mistake, mistake$ID)
final_df <- map_dfr(df_list, calc_datetime)
df_列表请给出一个小的可复制示例,其中包含dput
在哪里使用过see(即,我需要的差异时间,以分钟为单位)?总之,我只能说一句话:非常感谢,它工作得非常完美。正是我想要的!谢谢谢谢谢谢哈哈…听起来不错!很乐意帮忙。请注意StackOverflow的表达方式。总之,我只能说一句话:非常感谢,它工作得非常完美。正是我想要的!谢谢谢谢很高兴它成功了!你应该接受对你最有效的答案(可能是冻糕,因为他们做了大部分工作),并对任何你觉得有用的答案进行投票
str(mistake)
'data.frame': 2 obs. of 18 variables:
$ Baureihe : int 411 411
$ Verbund : Factor w/ 1 level "ICE1166": 1 1
$ Fahrzeug : Factor w/ 7 levels "93805411066-4",..: 7 7
$ Code : Factor w/ 6 levels "1A07","1A0E",..: 3 3
$ Codetext : Factor w/ 6 levels "ITD Karte gestört",..: 5 5
$ Subsystem : Factor w/ 1 level "Neigetechnik": 1 1
$ Kommt.Zeit : Factor w/ 70 levels "02.08.2018 00:07:23",..: 68 6
$ Geht.Zeit : Factor w/ 68 levels "01.08.2018 01:30:25",..: 68 8
$ Anstehdauer : Factor w/ 46 levels "00 Std 00 Min 01 Sek ",..: 12 4
$ Jahr : int 2018 2018
$ Monat : int 7 8
$ KW : Factor w/ 5 levels "KW27","KW28",..: 4 5
$ Tag : int 29 4
$ Wartung.geht: int 0 0
$ datetime : POSIXlt, format: "2018-07-29 23:00:00" "2018-08-04 11:16:00"
$ gehtzeit : POSIXlt, format: "2018-07-29 23:02:00" "2018-08-04 11:19:00"
$ bleiben :Class 'difftime' atomic [1:2] 2 3
.. ..- attr(*, "units")= chr "secs"
$ ID : chr "2018-07-29 23:00:00 2018-07-29 23:02:00 1A50" "2018-08-04 11:16:00 2018-08-04 11:19:00 1A50"
calc_datetime <- function(df) {
# INITIAL CALCS
start_date <- df$datetime
end_date <- df$gehtzeit
n_minutes <- interval(start_date, end_date)/minutes(1)
see <- start_date + minutes(0:n_minutes) # the diff time in minutes I need
# BUILD OUTPUT DF
df <- data.frame(df[rep(seq_len(dim(df)[1]), df$stay+1), 1:17, drop= F], row.names=NULL)
df$test <- format(see, format = "%d.%m.%Y %H:%M:%S")
return(df)
}
# BUILD LIST OF SUBSETTED DFs
df_list <- by(mistake, mistake$ID, calc_datetime)
# APPEND ALL RESULT DFs TO SINGLE FINAL DF
final_df <- do.call(rbind, df_list)
df_list <- split(mistake, mistake$ID)
final_df <- map_dfr(df_list, calc_datetime)