首页 > 解决方案 > 如何在 R 循环中不将 POSIXct 转换为数字

问题描述

我在 R 中有一个循环,它根据某些条件获取 POSIXct 列的先前值。但是,新列不再采用 POSIXct 格式,而是转换为数字。我怎样才能避免这种情况?

# Set up dataframe
df <- data.frame(
  building = c('a','a','a','a','b','b','b'),
  hour = c(as.POSIXct(c('2019-01-01 15:00:00','2019-01-01 15:00:00','2019-01-01 17:00:00','2019-01-01 18:00:00',
                        '2019-01-01 15:00:00','2019-01-01 16:00:00','2019-01-01 17:00:00')))
)

#Loop to get previous value of 'hour' based on conditions
df$prev_hour <- NA
for (i in 2:nrow(df)){
  if(df$building[i]==df$building[i-1] & as.integer(df$hour[i]-df$hour[i-1])<2){
    df$prev_hour[i] <- as.POSIXct(df$hour[i-1])
  }
}

df
  building                hour  prev_hour
        a  2019-01-01 15:00:00         NA
        a  2019-01-01 15:00:00 1546372800
        a  2019-01-01 17:00:00         NA
        a  2019-01-01 18:00:00 1546380000
        b  2019-01-01 15:00:00         NA
        b  2019-01-01 16:00:00 1546372800
        b  2019-01-01 17:00:00 1546376400

标签: rposixct

解决方案


推荐阅读