相关疑难解决方法(0)

data.table中的.EACHI?

我似乎无法找到关于究竟.EACHI做什么的任何文档data.table.我在文档中看到它的简要提及:

在i和设置中传递这些组时,已知组子集的聚合特别有效by=.EACHI.何时i是data.table,DT[i,j,by=.EACHI]评估连接中每一行j的组.我们称之为每个i的分组.DTi

但是,"群体"在上下文中DT是什么意思?是否由设置的密钥确定的组DT?该组是否每个使用所有列作为键的不同行?我完全理解如何运行类似DT[i,j,by=my_grouping_variable]但是如何.EACHI工作的困惑.有人可以解释一下吗?

performance group-by r data.table

63
推荐指数
1
解决办法
1万
查看次数

为什么DT1 [DT2] [,value1-value]比data.table上的DT1 [DT2,value1-value]更快,列数更少?

这与这个问题有关(我可以在data.table join中查看`j`中重复的列名吗?),因为我认为与此相反的是真的.

data.table只有2列:

假设您希望加入两个data.tables,然后对两个连接的列执行简单操作,这可以通过一次或两次调用来完成.[:

N = 1000000
DT1 = data.table(name = 1:N, value = rnorm(N))
DT2 = data.table(name = 1:N, value1 = rnorm(N))
setkey(DT1, name)

system.time({x = DT1[DT2, value1 - value]})     # One Step

system.time({x = DT1[DT2][, value1 - value]})   # Two Step
Run Code Online (Sandbox Code Playgroud)

事实证明,进行两次调用 - 首先进行连接,然后进行减法 - 明显比一次性快.

> system.time({x = DT1[DT2, value1 - value]})
   user  system elapsed 
   0.67    0.00    0.67 
> system.time({x = DT1[DT2][, value1 - value]})
   user  system elapsed 
   0.14    0.01 …
Run Code Online (Sandbox Code Playgroud)

r data.table

6
推荐指数
1
解决办法
166
查看次数

使用data.table [,, by = ...]时包括所有排列

我有一个大的data.table,我正在崩溃到月级使用,by.

有5个vars,有#个级别:c(4,3,106,3,1380).106是月,1380是地理单位.事实证明有一些0,因为有些单元格没有值. by放下这些,但我希望能保留它们.

可重复的例子:

require(data.table)

set.seed(1)
n <- 1000
s <- function(n,l=5) sample(letters[seq(l)],n,replace=TRUE)
dat <- data.table( x=runif(n), g1=s(n), g2=s(n), g3=s(n,25) )
datCollapsed <- dat[ , list(nv=.N), by=list(g1,g2,g3) ]
datCollapsed[ , prod(dim(table(g1,g2,g3))) ] # how many there should be: 5*5*25=625
nrow(datCollapsed) # how many there are
Run Code Online (Sandbox Code Playgroud)

是否有一种有效的方法用0来填充这些缺失值,以便所有by变量的排列都在最终的折叠data.table中?

r collapse data.table

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

标签 统计

data.table ×3

r ×3

collapse ×1

group-by ×1

performance ×1