【发布时间】:2018-08-17 16:28:44
【问题描述】:
我有一些带有开始时间和结束时间的事件记录的数据框。 我想将记录扩展为多个具有一致时间间隔的记录,比如说一小时的间隔。 例如,假设数据框包含两条记录:
EventId Day StartTime EndTime
1 Mon 1 3
2 Tues 2 5
我想要的新数据框应该是这样的
EventId Day Time
1 Mon 1
1 Mon 2
2 Tues 2
2 Tues 3
2 Tues 4
我的函数使用 data.table::setDT 来扩展记录,如下所示:
makeIncrementalRecords <- function(df) {
new <- data.table::setDT(df)[,
.(Time = seq(StartTime,
EndTime,
by = 1)),
by = .(EventId, Day)]
逐行执行,我没有问题,我得到了我想要的结果。当我将函数作为加载包的一部分执行时,出现以下错误...
Error in x[j]: invalid subscript type 'list'
我完全不明白为什么这段代码在作为函数执行时会突然停止工作。我猜这与本地功能环境有关。当我在全局环境中将数据框创建为“df”并在控制台中执行 setDT 函数时,它可以工作。
有什么建议吗?
谢谢
【问题讨论】:
-
是的,正如问题所述,我将其称为作为我创建的包的一部分的函数。如果代码直接在脚本中运行,但作为函数调用,我会收到错误消息。我正在加载 data.table 作为包的一部分。
-
抱歉我的误读。也许你已经知道了,但是这里有一些关于在包中使用 data.table 的说明:stackoverflow.com/a/10529888
-
谢谢弗兰克。这是一个很大的帮助。它突然通过向函数的 roxygen cmets 添加一个@import 来工作
标签: r data.table