将整数列转换为时间HH:MM

时间:2014-08-12 19:25:07

标签: r datetime

我试图学习R,并且我遇到了有关将数据集中的一列从整数值转换为时间的问题。

上述专栏以5分钟的分数打破了这些日子。使用以下格式:5将是00:05,105将是01:05而1105将是11:05。

如果我使用:

strptime(activity[,"interval"],format="%H%M")

结果对象返回" NA"对于低于1000的所有值。

非常感谢有关如何使用apply family制作相同流程的任何想法

我知道这是一个非常基本的问题,但我自己无法弄明白。

非常感谢

编辑:根据要求,活动[n," interval"]列(此列有17568行,包括5到2355的数字,连续几天),15个第一个元素如下所示:

activity[1:15,"interval"]
[1]   0   5  10  15  20  25  30  35  40  45  50  55 100 105 110

应该看起来像这样

activity[1:15,"interval"]
[1]   0000   0005  0010  0015  0020  0025  0030  0035  0040  0045  
[11]  0050   0055  0100  0105  0110

2 个答案:

答案 0 :(得分:5)

这是一个建议

temp <- c(0 ,  5 , 10,  15  ,20 , 25  ,30  ,35,  40,  45 , 50  ,55 ,100 ,105, 110) # Your data
temp2 <- mapply(function(x, y) paste0(rep(x, y), collapse = ""), 0, 4 - nchar(temp))
temp <- paste0(temp2, temp)
temp
# [1] "0000" "0005" "0010" "0015" "0020" "0025" "0030" "0035" "0040" "0045" "0050" "0055" "0100" "0105" "0110"

然后你可以做

format(strptime(temp, format="%H%M"), format = "%H:%M")
#[1] "00:00" "00:05" "00:10" "00:15" "00:20" "00:25" "00:30" "00:35" "00:40" "00:45" "00:50" "00:55" "01:00" "01:05" "01:10"

答案 1 :(得分:5)

使用sprintf的@David Arenburg代码的略微修改版本(请参阅此博客文章了解pastesprinthttp://trinkerrstuff.wordpress.com/2013/09/15/paste-paste0-and-sprintf-2/中的差异)&# 34;

temp <- c(0 ,  5 , 10,  15  ,20 , 25  ,30  ,35,  40,  45 , 50  ,55 ,100 ,105, 110) # Your data

temp <- sprintf("%04d", temp)

##  [1] "0000" "0005" "0010" "0015" "0020" "0025" "0030" "0035"
##  [9] "0040" "0045" "0050" "0055" "0100" "0105" "0110"

format(strptime(temp, format="%H%M"), format = "%H:%M")

##  [1] "00:00" "00:05" "00:10" "00:15" "00:20" "00:25" "00:30" "00:35"
##  [9] "00:40" "00:45" "00:50" "00:55" "01:00" "01:05" "01:10"