2

我有一个数据集,其中时间戳从纪元开始以秒为单位:

   id      event       time       
2 722     opened 1356931342
1 723     opened 1356963741
4 721 referenced 1356988186
5 721     closed 1356988186
3 721 referenced 1356988206

但是,由于处理大量非常长的时间戳会导致我正在使用的算法出现严重的性能问题(最佳匹配距离),我想将其减少为对哪个事件先出现(或同时出现)的简单排序)。我的意思是数据集中最早的事件(行)应该是 1,然后是 2、3、4 等。如果两行的数字完全相同(自纪元以来的秒数),则需要给它们相同的数字新的简化格式的数字。因此,这需要输出以下内容:

   id      event       time       
2 722     opened       1
1 723     opened       2
4 721 referenced       3
5 721     closed       3
3 721 referenced       4

“时间”列本质上是一个数字向量(不是因素 - 这将不起作用,因为我正在尝试解决性能问题)。

我可以使用以下命令订购数据框:

df <- df[with(df, order(time)), ]

但是,如何用有序的单个数字替换数字(相同的数字代表相同的时间戳)?

4

2 回答 2

4

使用因素:

df2 <- transform(df, time_f = as.numeric(factor(time)))
于 2013-10-30T14:06:37.353 回答
2

除非您有特定原因需要将时间列作为变量,否则我将使用matchandunique以下列方式创建向量...integerfactor

df$newtime <- match( df$time , unique( df$time ) )
#   id      event       time newtime
#2 722     opened 1356931342       1
#1 723     opened 1356963741       2
#4 721 referenced 1356988186       3
#5 721     closed 1356988186       3
#3 721 referenced 1356988206       4

无论如何factor使用match的代码。unique

于 2013-10-30T14:11:54.013 回答