0

我有一个数据集需要在格式上进行大量清理,并且在某些时候我想计算研究中人们钓鱼的时间。如果钓鱼开始和停止的时间采用正常格式,这将很容易,但由于某种原因,数据不是有用的十进制格式。例如,早上 10:45 记录为 10.45,而 11:10 记录为 11.10。

我已经尝试过要求 Excel 用冒号替换所有句点(它不会这样做,其他人已经尝试帮助我让 Excel 配合)。我可以想到在 R 中执行此操作的几种方法,但不确定如何继续进行。首先,如果有某种方法可以将小数点后的部分(仅)除以 60,那么十进制格式将是有意义的。那么,10.45 就是 10.75,减法就没有问题了。或者,也可以编写一些简单的代码来用冒号替换句点,然后(我在想?)使用类似 chron 包的东西来操作它。

我不知道您将如何对这些选项中的任何一个进行编码 - 有人有什么建议吗?我认为除以 60 可以通过在句点前后分解碎片的功能来完成(就像粘贴的相反),但我找不到这样的函数的名称。我想第一个也会更简单,尽管第二个实际上可能会阐明我在 R 中遇到的一个更大的问题,即试图弄清楚如何使命令可泛化。我了解如何强制它将所有 10.45 更改为 10:45,但希望我知道是否有一种格式只是说“取 XX.XX 并更改为 XX:XX”,无论实际数字是多少。但我想一次只做一件事。

4

1 回答 1

4

在没有示例的情况下,我as.difftime为此提出:

> d <- as.difftime('10.45', format='%H.%M')
> d
Time difference of 10.75 hours
> as.numeric(d)
[1] 10.75

对于您的评论,您必须确保将时间值作为字符串读取。

Time.Start = c(9.10, 9.10, 9.10, 9.10, 9.10, 9.10)
Time.Stop = c(14.25, 14.25, 14.25, 14.25, 14.25, 14.25)

把它们变成字符串。首先将它们作为字符串读取会更好,但我们可以使用 sprintf 将它们组合起来:

Time.Stop <- sprintf('%.2f', Time.Stop)
Time.Start <- sprintf('%.2f', Time.Start)

然后解析并取差。 -正在返回 class 的对象difftime,类似于上面。

strptime(Time.Stop, format='%H.%M') - strptime(Time.Start, format='%H.%M')

## Time differences in hours
## [1] 5.25 5.25 5.25 5.25 5.25 5.25
## attr(,"tzone")
## [1] ""
于 2012-12-31T20:41:42.640 回答