我开始在R中使用data.table包来提高代码的性能.我使用以下代码:
sp500 <- read.csv('../rawdata/GMTSP.csv')
days <- c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")
# Using data.table to get the things much much faster
sp500 <- data.table(sp500, key="Date")
sp500 <- sp500[,Date:=as.Date(Date, "%m/%d/%Y")]
sp500 <- sp500[,Weekday:=factor(weekdays(sp500[,Date]), levels=days, ordered=T)]
sp500 <- sp500[,Year:=(as.POSIXlt(Date)$year+1900)]
sp500 <- sp500[,Month:=(as.POSIXlt(Date)$mon+1)]
Run Code Online (Sandbox Code Playgroud)
我注意到as.Date函数完成的转换非常慢,与其他创建工作日的函数相比,等等.为什么会这样?是否有更好/更快的解决方案,如何转换为日期格式?(如果你问我是否真的需要日期格式,可能是的,因为然后使用ggplot2制作情节,这就像这种类型数据的魅力一样.)
更确切地说
> system.time(sp500 <- sp500[,Date:=as.Date(Date, "%m/%d/%Y")])
user system elapsed
92.603 0.289 93.014
> system.time(sp500 <- sp500[,Weekday:=factor(weekdays(sp500[,Date]), levels=days, ordered=T)])
user system elapsed
1.938 0.062 2.001
> system.time(sp500 <- sp500[,Year:=(as.POSIXlt(Date)$year+1900)])
user system elapsed
0.304 0.001 0.305
Run Code Online (Sandbox Code Playgroud)
在MacAir i5上,观测值略低于3000000.
谢谢
我有以下问题:
我在R会话中加载了我的包的一些开发版本
我编辑了源文件.
我分开并做:
system("R CMD check realizedvolatility")
system("R CMD build realizedvolatility")
system("R CMD install realizedvolatility_0.1.tar.gz")
library(realizedvolatility)
Run Code Online (Sandbox Code Playgroud)到现在为止,一切正常.现在,如果我尝试调出帮助文件,例如?realizedvolatility,错误
Error in fetch(key) : internal error -3 in R_decompress1
Run Code Online (Sandbox Code Playgroud)发生.
补救措施是完全重新启动R会话,然后一切正常.有没有办法让它在一个会话中工作?我尝试从命名空间中分离,使用各种选项进行安装,没有任何效果.
我使用的是Mac OS X Lion和R 2.14.1
是否有一种从一些网址获取数据的相当简单的方法?我试过最明显的版本,不起作用:
readcsv("https://dl.dropboxusercontent.com/u/.../testdata.csv")
Run Code Online (Sandbox Code Playgroud)
我没有找到任何可用的参考.有帮助吗?
我遇到了包中的fread()函数问题data.table.我知道它仍然是实验性的,但也许我在某处犯了一些错误.
这是可重复的例子:
library(data.table)
test <- data.frame(a=rnorm(300), b=rnorm(300))
write.csv(test,"a.csv")
fread("a.csv")
Run Code Online (Sandbox Code Playgroud)
给出错误:
Error in rbindlist(allargs) :
Item 2 has 2 columns, inconsistent with item 1 which has 3 columns
Run Code Online (Sandbox Code Playgroud)
和侧面的问题:我为什么要永远离开row.names=TRUE的write.csv问题吗?到目前为止,我只遇到了问题,因为它为数据添加了一个未命名的列.
谢谢.
我正在使用data.table fread()函数来读取一些缺少值的数据并且它们是在Excel中生成的,因此缺失值字符串是"#N/A".但是,当我使用该na.strings命令str时,读取数据的最终仍然是字符.要复制它,这里是代码和数据.
数据:
Date,a,b,c,d,e,f,g
1/1/03,#N/A,0.384650146,0.992190069,0.203057232,0.636296656,0.271766148,0.347567706
1/2/03,#N/A,0.461486974,0.500702057,0.234400718,0.072789936,0.060900352,0.876749487
1/3/03,#N/A,0.573541006,0.478062582,0.840918789,0.061495666,0.64301024,0.939575302
1/4/03,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A
1/5/03,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A
1/6/03,#N/A,0.66678429,0.897482818,0.569609033,0.524295691,0.132941158,0.194114347
1/7/03,#N/A,0.576835985,0.982816576,0.605408973,0.093177815,0.902145012,0.291035649
1/8/03,#N/A,0.100952961,0.205491093,0.376410642,0.775917986,0.882827749,0.560508499
1/9/03,#N/A,0.350174456,0.290225065,0.428637309,0.022947911,0.7422805,0.354776101
1/10/03,#N/A,0.834345466,0.935128099,0.163158666,0.301310627,0.273928596,0.537167776
1/11/03,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A
1/12/03,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A
1/13/03,#N/A,0.325914633,0.68192633,0.320222677,0.249631582,0.605508964,0.739263677
1/14/03,#N/A,0.715104989,0.639040211,0.004186366,0.351412982,0.243570606,0.098312443
1/15/03,#N/A,0.750380716,0.264929325,0.782035411,0.963814327,0.93646428,0.453694758
1/16/03,#N/A,0.282389354,0.762102103,0.515151803,0.194083842,0.102386764,0.569730516
1/17/03,#N/A,0.367802161,0.906878948,0.848538256,0.538705673,0.707436236,0.186222899
1/18/03,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A
1/19/03,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,#N/A
1/20/03,#N/A,0.79933188,0.214688799,0.37011313,0.189503843,0.294051763,0.503147404
1/21/03,#N/A,0.620066341,0.329949446,0.123685075,0.69027192,0.060178071,0.599825005
Run Code Online (Sandbox Code Playgroud)
(保存在temp.csv中的数据)代码:
library(data.table)
a <- fread("temp.csv", na.strings="#N/A")
Run Code Online (Sandbox Code Playgroud)
给(我有更大的数据集,所以忽略观察的数量):
Classes ‘data.table’ and 'data.frame': 144 obs. of 8 variables:
$ Date: chr "1/1/03" "1/2/03" "1/3/03" "1/4/03" ...
$ a : chr NA NA NA NA ...
$ b : chr "0.384650146" "0.461486974" "0.573541006" NA ...
$ c : chr "0.992190069" "0.500702057" "0.478062582" …Run Code Online (Sandbox Code Playgroud) 我试图从数据表中排除一些行,比如天数和月份 - 不包括例如暑假,这些行总是从6月15日开始到下个月15日结束.我可以根据Date提取那些日子,但是as.Date函数运行速度非常慢,我有月和日的单独整数列,我想只使用它们.
通过选择给定的条目很容易
DT[Month==6][Day>=15]
DT[Month==7][Day<=15]
Run Code Online (Sandbox Code Playgroud)
有没有办法如何使两者data.tables(原始的和我选择的)"差异" .(为什么不是子集?也许我错过了一些简单的东西,但我不想排除像10/6,31/7这样的日子.)
我知道有一种方法可以通过加入来实现,但只是日复一日
setkey(DT, Month, Day)
DT[-DT[J(Month,Day), which= TRUE]]
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助如何以更一般的方式解决它?
我通过将函数应用于data.table的某些子集来生成输出.我正在使用这样的函数:
data[, foo(args), by=list(Year, Month)]
Run Code Online (Sandbox Code Playgroud)
我的函数foo总是返回一个长度向量n.我得到这样的输出:
Year Month V1
1: 1983 2 9.734669e-06
2: 1983 2 9.165665e-06
3: 1983 2 2.097477e-05
4: 1983 2 3.803727e-05
Run Code Online (Sandbox Code Playgroud)
但我想要像
Year Month V1 V2 V3 V4 ...
1: 1983 2 9.734669e-06 9.165665e-06 2.097477e-05 3.803727e-05 ...
Run Code Online (Sandbox Code Playgroud)
我甚至尝试过使用list(foo(args)),但没有帮助.或者输出应该是什么形式foo$V1, foo$V2 ...?
我正在尝试构造四个向量的所有可能组合(模型中的参数),这将给我一个大的nx4矩阵,然后可以对每组参数(行)进行仿真。在RI中,可以通过使用expand.gridMathematica样式来实现此目的,我可以使用外部乘积之类的东西,vcat并使用减少输出hcat。
是否有expand.grid来自R或外部映射函数的某些函数类似物?
玩具示例:
A = [1 2]
B = [3 4]
some magic
output = [1 3, 1 4, 2 3, 2 4]
Run Code Online (Sandbox Code Playgroud) 有没有办法如何在R中创建类似data.frame对象的东西,它指向MySQL数据库中的特定表,并且表现得像data.frame?我没有找到任何关于它的提及.
作为一个例子,让我们说,我有一个名为客户和列名称,高度,权重的表,我想要一些功能,这将创建可变客户,我可以像data.frame一样访问各自的列,即客户$高度等
我的问题是我正在处理非常大的数据集,并且在数据库上操作要快得多,并且实际上可能会破解SQL中的一些描述性统计信息以用于这样的指针变量,例如sum,average等...
谢谢你的回答.T.
我试图获得基于滞后/转发的功能应用程序.我广泛使用data.table,我甚至有工作代码,但data.table我知道必须有一个更简单的方法来实现相同的可能提高性能(我在函数内部做了很多变量).下面是工作的功能代码(可在https://gist.github.com/tomaskrehlik/5262087#file-gistfile1-r获得)
# Lag-function lags the given variable by the date_variable
lag_variable <- function(data, variable, lags, date_variable = c("Date")) {
if (lags == 0) {
return(data)
}
if (lags>0) {
name <- "lag"
} else {
name <- "forward"
}
require(data.table)
setkeyv(data, date_variable)
if (lags>0) {
data[,index:=seq(1:.N)]
} else {
data[,index:=rev(seq(1:.N))]
}
setkeyv(data, "index")
lags <- abs(lags)
position <- which(names(data)==variable)
for ( j in 1:lags ) {
lagname <- paste(variable,"_",name,j,sep="")
lag <- paste("data[, ",lagname,":=data[list(index-",j,"), ",variable,", …Run Code Online (Sandbox Code Playgroud) 我正在尝试data.table使用以下结构写入光盘a :
Classes ‘data.table’ and 'data.frame': 408776 obs. of 13 variables: $ date : IDate, format: "2013-02-01" "2013-02-01" "2013-02-01" "2013-02-01" ... $ hour : int 1 1 1 1 1 1 2 2 2 2 ... $ time :Class 'ITime' int [1:408776] 16 186 218 229 463 474 16 186 208 218 ... $ bids_med : num NA NA NA 2.1 2.1 4.6 NA 7.5 7.5 7.5 ... $ bids_n : int NA NA NA 2 2 2 …
我在R中有一个字符串(使用RStudio)
legend <- c('Up to 5 minutes', '5-10 minutes', '10–20 minutes', '20–40 minutes', '40–80 minutes', '80-160 minutes', '160-320 minutes', '5.3-10.6 hours', '10.6-21.2 hours', '1-2 days')
Run Code Online (Sandbox Code Playgroud)
当我只是逐行运行源代码时运行正常.但是当我获取代码时,它会抛出一个错误
Error in source(con, echo = echo, print.eval = print.eval, max.deparse.length = max.deparse.length, :
con:29:52: unexpected INCOMPLETE_STRING
Run Code Online (Sandbox Code Playgroud)
哪里可能是问题?