data.table:cast column to timeStamp不会工作

时间:2015-06-18 10:25:07

标签: r data.table

我正在使用data.table版本1.9.4。我有以下R脚本:




  library(data.table)
 asTimeStamp = function(strangeDateString){
 #YYYY-MM-DD HH形式的日期:MM:SS.xxxxxx
 #即例如
 #2015-02-26 23:56:13.023467
 formatString =“%Y-%m-%d%H:%M:%OS”
 return(strptime(strangeDateString,formatString))
}
 dt = data.table(timeAsString = c(“2000-01-01 12:00:00.000000”,“2000-01-01 12:01 :00.000000“))
 dt [,x:= asTimeStamp(timeAsString)]
  




应该生成第二个数据表中的列'x'




  timeAsString
 1:2000-01-01 12:00:00.000000
 2:2000- 01-01 12:01:00.000000
  




包含某些可计算格式的'timeAsString',如POSIXwhatever。该脚本抛出错误




 警告消息:
在`[.data.table`(dt ,,`:=`(x,asTimeStamp) (timeAsString))):
提供了11个项目,分配给2个“x”列(9个未使用)
  




,我获得以下数据表:< / p>&#xA;&#xA;

  timeAsString x&#xA; 1:2000-01-01 12:00:00.000000 0,0&#xA; 2:2000-01-01 12:01 :00.000000 0,1&#xA;  
&#xA;&#xA;

也许我错误地使用它但我认为

&#xA;&#xA; < pre> dt [,newColumn:= function(oldColumns)]&#xA; &#xA;&#xA;

like,例如

&#xA ;&#xA;
  dt [,newColumn:= oldColumn + 1]&#xA;  
&#xA;&#xA;

应该执行'功能'on'oldColumn'并将结果输入'newColumn'......?

&#xA;&#xA;

注意:命令

&#xA;&#xA;
  print(asTimeStamp(dt $ timeAsString));&#xA; print(dt [,asTimeStamp(timeAsString)]);&#xA;  
&#xA;&#xA;

两者都有效,所以功能似乎是正确的......

&#xA;&#xA;

THX,问候,

&#xA;&#xA;

FW

&#XA;

1 个答案:

答案 0 :(得分:0)

啊,它的R再次阻碍了我。奇怪的警告来自POSIXlt - &gt;的事实。 data.table entry R试图将POSIXlt元素转换为奇怪的东西(可能是一个列表左右?)因为data.table似乎只接受'基本'数据类型。

所以,每当你想要做多件事时,就像在我的情况下一样,你必须把它们作为一个角色留下来,然后每隔时间做你想做的操作。示例:按timeStamp对表进行排序,然后以天为单位计算“现在”的差异 理想解决方案 创建一个包含可计算格式的timeStamp的新列,并在每次执行操作时使用此列。

- &GT;不起作用(见上文)

'慢'解决方案: 每次使用timeStamps进行操作时都会动态进行转换,但始终将它们保留为data.table中的字符串:

1)按timeStamp排序

dt = dt[rev(order(asTimeStamp(timeAsString), decreasing = TRUE)),]

2)计算与'now'的差异

now = Sys.time()
dt = dt[, diffToNowInDays := difftime(asTimeStamp(timeAsString), now, units="days")]

- &GT;我需要施放2次: - (