小编Jua*_*tro的帖子

在data.table中使用by连接继承范围

我正在使用data.table 1.9.3,也许我错了,但我不记得之前的预期.

我构建了2个data.tables,dta和dtb

> dta
   idx vala fdx
1:   1    2   a
2:   2    4   a
3:   3    6   b

> dtb
   idx valb
1:   1    3
2:   4    6

> dput(x = dta)
structure(list(idx = c(1, 2, 3), vala = c(2, 4, 6), fdx = c("a",
"a", "b")), .Names = c("idx", "vala", "fdx"), row.names = c(NA,
-3L), class = c("data.table", "data.frame"), .internal.selfref =
<pointer: 0x0000000000110788>, sorted = "idx")

> dput(x = dtb)
structure(list(idx = c(1, 4), valb = c(3, …
Run Code Online (Sandbox Code Playgroud)

join r data.table

49
推荐指数
1
解决办法
689
查看次数

更新data.table的多个列

是否可以在同一语句中更新data.table的1列以上?

就像是

dt[,onecol:=1 anothercol:=2]
Run Code Online (Sandbox Code Playgroud)

我见过他们做过的一些例子

dt[,c("onecol","anothercol"):=1]
Run Code Online (Sandbox Code Playgroud)

但我不知道如何为每列分配不同的公式

r data.table

11
推荐指数
1
解决办法
287
查看次数

data.table中的快速EXISTS

检查data.table中是否存在值的最快方法是什么?假设

  • dt是n列的data.table,其中k列是键
  • keys是一个列表,一个值,一个data.table,或者可以在i参数中使用的任何东西[.data.table

我现在正在做

NROW(dt[keys,nomatch=0])!=0
Run Code Online (Sandbox Code Playgroud)

有什么更快的吗?

require(data.table)
iniDate = as.Date("2000-01-01")
theData = data.table(a = LETTERS, d = seq(from=iniDate ,to= iniDate + length(LETTERS)*3000-1,by="day"))
theKeys = data.table(a = c("J","M","T"), d = as.Date(c("2005-01-20","2005-05-20","2013-01-12")))
setkey(theData,a,d)
NROW(theData[theKeys],nomatch=0)!=0
Run Code Online (Sandbox Code Playgroud)

r data.table

5
推荐指数
1
解决办法
1854
查看次数

快速贷款利率计算大量贷款

我有一个大数据集(大约20万行),其中每一行都是贷款.我有贷款金额,付款数量和贷款支付.我正试图获得贷款利率.R没有计算它的函数(至少基数R没有它,我找不到它).编写npv和irr函数并不难

Npv <- function(i, cf, t=seq(from=0,by=1,along.with=cf)) sum(cf/(1+i)^t)
Irr <- function(cf) { uniroot(npv, c(0,100000), cf=cf)$root }
Run Code Online (Sandbox Code Playgroud)

你可以做到

rate = Irr(c(amt,rep(pmt,times=n)))
Run Code Online (Sandbox Code Playgroud)

问题是当您尝试计算大量付款的费率时.因为uniroot没有矢量化,并且因为rep需要花费大量时间,所以最终会导致计算速度变慢.如果你做一些数学计算并发现你正在寻找下面等式的根源,你可以加快速度

zerome <- function(r) amt/pmt-(1-1/(1+r)^n)/r
Run Code Online (Sandbox Code Playgroud)

然后将其用作uniroot的输入.在我的电脑上,这需要大约20秒来运行我的200k数据库.

问题是我正在尝试进行一些优化,这是优化的一个步骤,所以我试图加快它的速度.

我已经尝试了矢量化,但由于uniroot没有矢量化,我不能再这样了.有没有矢量化的根发现方法?

谢谢

finance r

4
推荐指数
1
解决办法
640
查看次数

标签 统计

r ×4

data.table ×3

finance ×1

join ×1