我有一个名为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对象,而不是仅仅将它们转换为字符串。
答案 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')