Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r中带有datetime的列表元素的循环 r中带有datetime的列表元素的循环_R_List_Loops_Datetime_Posixlt - Fatal编程技术网

r中带有datetime的列表元素的循环 r中带有datetime的列表元素的循环

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

我有一个名字错误的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
 $ 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)