我正在使用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个未使用)

&#xA;&#xA; ,我获得以下数据表:< / 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;答案 0 :(得分:0)
所以,每当你想要做多件事时,就像在我的情况下一样,你必须把它们作为一个角色留下来,然后每隔时间做你想做的操作。示例:按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次: - (