为什么这个日期被转换成其他东西?我正在使用R.

时间:2017-11-24 22:08:09

标签: r date

我有一个名为smashgg.results的锦标赛结果数据框。它有数千行,每个锦标赛一个。

names(smashgg.results) 

> [1] "name"           "finalPlacement" "tournament"     "entrants"

我有另一个名为ted的数据框(Tourney,Entrant,Date的缩写),列出了每个锦标赛的参赛者的日期和数量。这只有35行。

names(ted)

> [1] "Tournament" "Entrants"   "Date" 

我也有一个像这样工作的info()函数,其中smashgg.results $ tournament [1]等于“the-larger-balc”:

nfo(smashgg.results$tournament[1], ted) 

$Entrants

> [1] 372

$Date

> [1] "2017-05-28 UTC"

$Match

> [1] "The Bigger Balc"

$Tournament

> [1] "the-bigger-balc"

info(smashgg.results$tournament[1], ted)$Date

> [1] "2017-05-28 UTC"

我想在smashgg.results中初始化一个空列,并在同一行中填入与锦标赛相对应的日期。但是当我尝试这个时,日期会被转换,我不明白为什么。

ex = info(smashgg.results$tournament[1], ted)$Date

ex

> [1] "2017-05-28 UTC"

smashgg.results$date = NA

smashgg.results$date[1] = info(smashgg.results$tournament[1], ted)$Date

smashgg.results$date[1]

> [1] 1495929600

有关如何维护日期格式的任何提示?

编辑:这是info()函数:

# Function for fetching the entrant count and date of a tournament
info = function(tournament, info) {

  for (i in 1:dim(info)[1]) {

    if (tournament == info$Tournament[i] | 
        tournament == gsub("'", "-", gsub(" ", "-", tolower(info$Tournament[i])))) {
      entrants = info$Entrants[i]
      date = info$Date[i]
      match = info$Tournament[i]
    }
  }
  list(Entrants = entrants, Date = date, Match = match, Tournament = tournament)
}

另外,我打算使用这些日期来执行日期算术,所以我能够在某些时候将它们转换为datetime对象,而不是仅仅将它们转换为字符串。

1 个答案:

答案 0 :(得分:0)

info功能中包含哪些内容?自从纪元访问info(smashgg.results$tournament[1], ted)$Date或分配smashgg.results$date[1] <- info(smashgg.results$tournament[1], ted)$Date时,日期被强制推迟到毫秒。

快速而又脏的修复方法是通过以下方法将毫秒转换回日期对象:

smashgg.results$date <- as.POSIXct(smashgg.results$date, origin = '1970-01-01')

或者,如果您不需要进行任何日期操作,则可以将日期转换为info函数中的字符。然后将新的日期列初始化为一个角色对象,而不是像上面那样逻辑(当你指定[http://adv-r.had.co.nz/Data-structures.html]时,这种强制会发生,但是冗长有助于学习。)

smashgg.results$date = NA_character_
smashgg.results$date[1] = info(smashgg.results$tournament[1], ted)$Date

然后您可以随时使用

将其转换回日期

smashgg.results$date <- as.Date(smashgg.results$date, format = '%Y-%m-%d')