小编Puk*_*uki的帖子

data.table由多列合并

我对编程很新,也对data.tableR 很新- 所以也许这个问题非常简单,但我搜索过并找不到任何解决方案.

我试图成对匹配4个变量并添加一个具有查找值的列.在基地,我会做merge(df1,df2, by.x=c("lsr","ppr"),by.y=c("li","pro")),df1有9个cols,df2(2个lsrpro)df2只有3个li,pro和我感兴趣的"价值",alpha.

这很好,但是当我开始成为一个巨大的粉丝时data.table,我想这样做data.table- 因为我有几百万行 - 所以基本合并很慢(我看到,这个by.xby.y功能是等待data.table,但也许有一个解决方法).请参阅以下示例数据:

df2:
         alpha         li        pro
      1: 0.5000000 0.01666667 0.01666667
      2: 0.3295455 0.03333333 0.01666667
      3: 0.2435897 0.05000000 0.01666667
      4: 0.1917808 0.06666667 0.01666667
      5: 0.1571429 0.08333333 0.01666667
df1:     
          demand rtime    mcv         mck        ppr       mlv         mlk        lsr
      1:    0.3     1 357.57700 0.099326944 0.01666667 558.27267 0.155075741 …
Run Code Online (Sandbox Code Playgroud)

merge r data.table

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

使用data.table在循环中优化子集

我有一个关于如何优化以下代码的基本问题.这是我的代码的一个非常简短的版本.基本上,我有一个大的data.table(> 50M行),我想经常对数据进行子集化(比如10000次)并在子集上运行一些函数(显然比下面的例子中显示的更复杂,即我需要子集的所有列,函数返回一个新的data.table).我只是选择了平均值来使示例变得简单.

dt <- data.table(a=sample(letters, 1000000,replace=T),b=sample(1:100000))

mm <- list()

foo <- function(x) mean(x$b)

for(i in 1:1000)
{
  mm[[i]] <-  foo(dt[a %in% sample(letters,5)])
}
Run Code Online (Sandbox Code Playgroud)

很明显,即使这个最小的例子(设置键等),这也不是编程的最快方法.

但是,我感兴趣的是如何优化for循环.我想到了为子集创建索引然后使用data.table dt[,foo(.SD),by=subset_ID],但我不知道如何做到这一点,因为我正在使用替换(多个组ID)进行采样.任何基于data.table的想法都会非常感激(例如如何删除循环?).

loops r data.table

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

标签 统计

data.table ×2

r ×2

loops ×1

merge ×1