如何在 R 中的 for 循环中使用 as_hms

How to use as_hms in a for loop in R

我有多个包含“时间戳”和“users_holding”列的 csv 文件,我能够将时间戳列拆分为“日期”和“时间”两列。我现在正在尝试汇总每个文件的时间列。四舍五入后,我想再次重新组合两列并删除任何双行。一个文件的代码如下:

    data <- separate(data = data, col = timestamp, into  = c('Date', 'Time'), sep = ' ')
as_hms(data$Time)
data$Time <- round_hms(as_hms(data$Time), 60*60)
data$timestamp <- paste(data$Date,data$Time)
data <- data[!duplicated(data$timestamp), ]

A 编写了一个 for 循环来分隔列。但是我无法为其他步骤构建代码。我目前的代码如下:

    #Separate all timestamps into Date and Time
files <- list.files(pattern = "*csv")
df_list <- lapply(files,read_csv)
df <- bind_rows(df_list)

st_datasets <- df_list
updated_datasets_st <- list()
for (i in 1:length(st_datasets)){
  d <- st_datasets[[i]] %>% separate(col = timestamp, into  = c('Date', 'Time'), sep = ' ')
  updated_datasets_st[[i]] <- d
}
#need help for this part. The code above is working
for (i in 1:length(st_datasets)){
  d <- st_datasets[[i]] %>% round_hms(as_hms(st_datasets$Time), 60*60)
  updated_datasets_st[[i]] <- d
}

好的,这是一个代码问题。对不起。唉。

您使用迭代器调用包含数据集列表的数据集。但是,当您编写 st_datasets$Time 时,没有迭代器 — 如果您在那里添加迭代器,它将无法工作。

您仍然可以循环或矢量化。我已经提供了这两种方法。

使用向量化

updt = lapply(1:length(st_datasets),
              function(i){
                st_datasets[[i]]$Time <- round_hms(as_hms(st_datasets[[i]]$Time), 60*60)
                st_datasets[[i]]
              })

使用 for 循环

upper = list()
for(i in 1:length(st_datasets)){
  st_ds = st_datasets[[i]]
  st_ds$Time = round_hms(as_hms(st_ds$Time), 60*60)
  upper[[i]] <- st_ds
}
upper