0

恐怕还有一个新手问题。我正在尝试使用“lubridate”创建新变量并遇到 3 个问题。

我从一个以 H:MM:SS 或 HH:MM:SS 格式导入的变量“时间”开始。我还创建了“timeC”作为角色。

1.显示问题

    temp$time2 <- hms(temp$time) #take my original variable "time" and convert

问题:屏幕上只显示“time2”的秒部分,尽管“在引擎盖下”看起来是正确的:

 time2
 ----
  4

> temp$time2[1,]
[1] "7H 0M 4S"

2.提取小时数问题

     temp$hour <- hour(temp$time2) #extract just the hours portion

问题:这会间歇性地工作;有时很好,有时我收到以下错误:

Error in as.POSIXlt.character(as.character(x), ...) : 
   character string is not in a standard unambiguous format

这让我很担心,因为这似乎不像是 lubridate 应该抛出的那种信息。

3.提取小时和分钟问题

temp$hourMins <- hm(temp$time2)

问题:hourMins 的每个值都是“NA”

我可能已经投入了 4 多个小时试图解决这个问题,并且想知道是否有另一个软件包可以支持我正在尝试做的事情。

任何建议将不胜感激。提前致谢和问候!

4

1 回答 1

0

首先,制作一个“玩具”数据进行说明,

require(lubridate)
temp <- data.frame(time=factor(c("01:01:01","02:02:02","03:03:03")))
temp$time2 <- hms(temp$time)
temp

##       time    time2
## 1 01:01:01 1H 1M 1S
## 2 02:02:02 2H 2M 2S
## 3 03:03:03 3H 3M 3S

1) 显示问题

你需要attach

attach(temp)
## The following objects are masked from temp (position 3):

##     time, time2

time2
## [1] "1H 1M 1S" "2H 2M 2S" "3H 3M 3S"

## detach(temp) # after final use.

否则,time2是环境中已经存在的变量,而不是 的列temp

编辑:您可以检查str以查看您的time2.

str(time2)
## Formal class 'Period' [package "lubridate"] with 6 slots
##   ..@ .Data : num [1:3] 1 2 3
##   ..@ year  : num [1:3] 0 0 0
##   ..@ month : num [1:3] 0 0 0
##   ..@ day   : num [1:3] 0 0 0
##   ..@ hour  : num [1:3] 1 2 3
##   ..@ minute: num [1:3] 1 2 3

如果您time2具有类似的结构,但在您键入时只显示“秒”部分time2,这意味着您的此类对象的打印功能已被意外覆盖。

2) 提取小时数问题

temp$hour <- hour(temp$time2)

没问题

3)提取小时和分钟问题

time3 <- gsub("^(.+):[^:]+$","\\1",as.character(temp$time))
time3
## [1] "01:01" "02:02" "03:03"

hm(time3)
## [1] "1H 1M 0S" "2H 2M 0S" "3H 3M 0S"

或者直接使用 {hms} 来包含秒数,

hms(temp$time)
## [1] "1H 1M 1S" "2H 2M 2S" "3H 3M 3S"
于 2014-02-09T21:00:33.640 回答