代码之家  ›  专栏  ›  技术社区  ›  user2657817

从TIBLE中的第1行中减去第2行

  •  1
  • user2657817  · 技术社区  · 8 年前

    我在R中有一个tibble对象,它看起来如下所示: enter image description here

    对于每列,我想从第2行中减去第1行。我目前的做法如下:

    mean.diff <- each.group.mean[1,2:num.groups]-each.group.mean[2,2:num.centroids]
    

    令人困惑的是,要在2x9660 TIBLE上执行此语句,代码需要8-15秒,这取决于Sys。时间()计算。如果您能帮助我们更快地完成此任务,并理解此命令为什么需要这么长时间,我们将不胜感激。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Community Mohan Dere    6 年前

    通过 unlist vector 让它更有效率

    unlist(each.group.mean[1,2:num.groups], use.names = FALSE)-
        unlist(each.group.mean[2,2:num.centroids], use.names = FALSE)
    

    data.frame tibble etc有许多类属性,这使得进行子集和计算的速度较慢。通过转换为 矢量 所有这些课程都被取消了。使用可再现的示例

    数据

    set.seed(24)
    df1 <- as.tibble(as.data.frame(matrix(sample(1:10, 9660*10, 
         replace = TRUE), ncol = 9660)))
    

    system.time(df1[1,] - df1[2,])
    #   user  system elapsed 
    #   0.78    0.00    0.78 
    
    system.time(unlist(df1[1,], use.names = FALSE) - unlist(df1[2,], use.names = FALSE))
    #   user  system elapsed 
    #   0.03    0.00    0.03