【发布时间】:2012-05-28 17:25:52
【问题描述】:
我对 R 的了解和经验有限,请多多包涵。
我有以下形式的持续时间测量:
d+h:m:s.s
例如3+23:12:11.931139,其中 d=天,h=小时,m=分钟,s.s=十进制秒。我想创建这些值的直方图。
有没有一种简单的方法可以将此类字符串输入转换为数字形式,例如秒?我发现的所有信息似乎都针对日期时间对象。
理想情况下,我希望能够在命令行上将数据列表通过管道传输到 R,从而动态创建直方图。
干杯
洛里斯
【问题讨论】:
我对 R 的了解和经验有限,请多多包涵。
我有以下形式的持续时间测量:
d+h:m:s.s
例如3+23:12:11.931139,其中 d=天,h=小时,m=分钟,s.s=十进制秒。我想创建这些值的直方图。
有没有一种简单的方法可以将此类字符串输入转换为数字形式,例如秒?我发现的所有信息似乎都针对日期时间对象。
理想情况下,我希望能够在命令行上将数据列表通过管道传输到 R,从而动态创建直方图。
干杯
洛里斯
【问题讨论】:
基于SO的另一种解决方案:
op <- options(digits.secs=10)
z <- strptime("3+23:12:11.931139", "%d+%H:%M:%OS")
vec_z <- z + rnorm(100000)
hist(vec_z, breaks=20)
简短说明:首先,我设置选项以显示毫秒。现在,如果你在控制台中输入z,你会得到“2012-05-03 23:12:11.93113”。然后,我将您的字符串解析为日期对象。然后我创建更多日期并绘制直方图。我认为对你来说重要的一步是解析,strptime 应该可以帮助你
【讨论】:
strptime。我实际上并不需要毫秒,因为这些值通常以小时为单位,但很高兴知道如何做到这一点。
我会这样做:
str = "3+23:12:11.931139"
result = sum(as.numeric(unlist(strsplit(str, "[:\\+]", perl = TRUE))) * c(24*60*60, 60*60, 60, 1))
> result
[1] 342731.9
然后,您可以将其包装成一个函数并应用于列表或向量。
【讨论】: