我正在写使用一些有用的功能像其他一些包R里面的函数stringr和base64enc.是不是首先要调用library(...)或者require(...加载这些包,而是::用来直接引用我需要的函数,比如stringr::str_match(...)?
在一般情况下这是一个好习惯吗?或者它会引起什么问题?
我目前正在处理带有R的刻度数据,我想将日期和时间合并到一个对象中,因为我需要获得一个精确的时间对象来计算我的数据的一些统计数据.以下是我的数据的样子:
date time price flag exchange
2 XXH10 2010-02-02 08:00:03 2787 1824 E
3 XXH10 2010-02-02 08:00:04 2786 3 E
4 XXH10 2010-02-02 08:00:04 2787 6 E
5 XXH10 2010-02-02 08:00:04 2787 1 E
6 XXH10 2010-02-02 08:00:04 2787 1 E
Run Code Online (Sandbox Code Playgroud)
基本上,我想将"date"和"time"列合并为一个.
我有一个包含许多列的大型数据集,其中包含两种不同格式的日期:
"1996-01-04" "1996-01-05" "1996-01-08" "1996-01-09" "1996-01-10" "1996-01-11"
Run Code Online (Sandbox Code Playgroud)
和
"02/01/1996" "03/01/1996" "04/01/1996" "05/01/1996" "08/01/1996" "09/01/1996"
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,class()都是"character".由于数据集有很多行(450万),我正在寻找一种有效的data.table转换方法.现在,我使用这个自建功能:
convert_to_date <- function(in_array){
tmp <- try(as.Date(in_array, format = "%d/%m/%Y"),TRUE)
if (all(!is.na(tmp)) & class(tmp) != "try-error"){
return(tmp)
} else{
tmp2 <- try(as.Date(in_array),TRUE)
if (all(!is.na(tmp2)) & class(tmp2) != "try-error"){
return(tmp2)
} else{
return(in_array)
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我用它转换我需要的列(data.table DF)
DF[,date:=convert_to_date(date)]
Run Code Online (Sandbox Code Playgroud)
然而,这仍然非常缓慢(每列接近45s).
有没有办法通过data.table方法优化这个?到目前为止,我还没有找到更好的方法,所以我会感谢任何提示.
PS:为了更好的可读性,我将该函数"外包"到第二个文件并在我的主程序中获取它.这是否会对R中的计算速度产生(负面)重大影响?
r ×3
data.table ×1
date ×1
finance ×1
namespaces ×1
scope ×1
scoping ×1
statistics ×1
time-series ×1