【问题标题】:assing data and time (formats) for data.frame variable为 data.frame 变量分配日期和时间(格式)
【发布时间】:2020-10-05 10:26:15
【问题描述】:

亲爱的...

考虑到日期和时间格式,我需要在 data.frame 中获取数据。为此,我创建了这样的 data.frame 结构:

df <- data.frame(action = character(),
                 date = as.Date(character(), format = "%Y%m%d"),
                 time = charcter()) #I didn't find a way to format time :(

我正在使用 read_lines 命令读取文件,当我从文件中获取数据时,我设法像这样格式化日期:

# Date position in line is 44-51
my_date <- as.Date(as.character(str_sub(line, 44, 51)), format = "%Y%m%d")
#Time position in line is 52-57
my_time <- paste(str_sub(l,52,53),":",str_sub(l,54,55),":",str_sub(l,56,57), sep="")

如果我打印 my_date 和 my_time,格式是完美的,但是当我分配给 data.frame 时,它​​会弄乱格式。我希望使用 data.frame 中的日期和时间数据来计算信息。例如,如果我有格式来计算天数、小时数,那就太好了。

#dput of my_date
.structue(15431, class = "Date")
#dput of my_time
"18:59:39"

您怎么看,我已将 my_date 设置为日期格式,但是当我在 data.frame 中分配时它会变得混乱。关于 my_time,我只是将字符格式设置为可视化,但我不知道将时间格式化为 HH:MM:SS。

感谢您的帮助。

嗨,伊恩 首先,感谢您花时间帮助我。 当我将值分配给 data.frame 时,问题仍然存在。我想我在那里做错了什么。见...

当我收集日期和格式时:

[1] "2012-04-01" 
[1] "18:59:30"      
[1] "2012-04-01 18:59:00 -03"
structure(1333317540, class = c("POSIXct", "POSIXt"), tzone = "")

第一行是打印命令在日期变量上的结果,格式为

date <- as.Date(as. character(str_sub(l, 44,51), format = "%Y%m%d"). 

没关系! 第二行是打印命令随时间变化的结果,格式为

time <- paste(str_sub(l,52,53),":",str_sub(l,54,55),":",str_sub(l,56,57), sep="")

没关系!

3dr 行是打印命令在 date_time 变量上的结果,格式为

date_time <- as.POSIXct(paste(date, time), format="%Y-%m-%d %H:%M%OS")

根据您的提示,非常完美!

第 4 行是 dput(date_time) 的结果,而传递给 data.frame 的值是 1333317540 3dr 行。

我像这样声明空白 data.frame:

df <- data.frame(ass_source = character(),
                           eot_ass_source = character(),
                           area_ass_source = character(),
                           #date = as.Date(character(), format = "%Y%m%d"),
                           #time = character(),
                           date_time = as.POSIXct(character(), format = "%Y-%m%d %H:M%OS"))

我正在输入这样的数据(进入 for 循环):

df <- rbind(df, list(ass_source=ass_source, 
                     eot_ass_source=eot_ass_source, 
                     area_ass_source=area_ass_source,                                      
                     #date=as.Date(as.character(date), format= "%Y%m%d"), 
                     #time=time, 
                     date_time=date_time))

【问题讨论】:

  • 嗨 Beto,欢迎来到 Stack Overflow。你能提供dput(my_date[1:10])dput(my_time[1:10])吗?您可以edit您的问题并粘贴输出。请用三个反引号(```)包围输出以获得更好的格式。请参阅How to make a reproducible example 了解更多信息。
  • 我刚刚展示了 dput 结果。 TKS!

标签: r dataframe time format as.date


【解决方案1】:

您的my_date 似乎属于Date 类,而您my_time 是一个字符串。一种方便的选择是使用POSIXct 类,它将日期和时间组合到一列中。为此,只需将两者粘贴在一起并使用as.POSIXct。它将被矢量化,您可以一次执行多个。

my_date <- structure(15431, class = "Date")
my_time <- "18:59:39"
data.frame(time = as.POSIXct(paste(my_date,my_time)))
                 time
1 2012-04-01 18:59:39

【讨论】:

  • 我的问题继续在为 data.frame 赋值。它的格式与.Date 相同,在data.frame 之外它可以工作,但是当我为data.frame 分配值时,它会弄乱格式。
猜你喜欢
  • 2013-06-15
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
相关资源
最近更新 更多