【问题标题】:data.table: difference to first of groupdata.table:与第一组的差异
【发布时间】:2018-02-28 01:07:43
【问题描述】:

我有数据

dat <- data.table(id=1:8, group=c(1,1,2,2,2,3,3,3), val=c(4,10,5,10,10,6,10,10))

> dat
   id group val
1:  1     1   4
2:  2     1  10
3:  3     2   5
4:  4     2  10
5:  5     2  10
6:  6     3   6
7:  7     3  10
8:  8     3  10

我想从每一个中减去其各自group 的第一个值。

> res
   id group val dif
1:  1     1   4   0
2:  2     1  10   6  
3:  3     2   5   0
4:  4     2  10   5   
5:  5     2  10   5
6:  6     3   6   0
7:  7     3  10   4
8:  8     3  10   4

我总是对data.table 的效率感到惊讶,所以我想知道它是否可以提供解决方案。当然,任何其他有效的方法同样受欢迎。

【问题讨论】:

  • 您的val 是整数,它是如何变成带小数的值的?
  • 意外发布,尚未完成。
  • 您最近发布了很多data.table 问题,其中有几个很好的答案。请向我们展示您从他们那里学到的东西,并向我们展示您的尝试。 SO 不是免费的代码编写服务(是的,我知道我们的 FGITW 不同意)。
  • 我要补充一点,在提问之前,您可以在这里轻松找到 data.table 基本使用的答案:cran.r-project.org/web/packages/data.table/vignettes/…
  • 第二个Henrik,这里是OP今天发布的一个非常相似的问题的链接:stackoverflow.com/q/49013507/3817004

标签: r data.table


【解决方案1】:
dat[,diff:=val-val[1],by=group]
dat
   id group val diff
1:  1     1   4    0
2:  2     1  10    6
3:  3     2   5    0
4:  4     2  10    5
5:  5     2  10    5
6:  6     3   6    0
7:  7     3  10    4
8:  8     3  10    4

【讨论】:

    【解决方案2】:

    使用 Tidyverse (dplyr),您可以这样做:

    library(dplyr)
    
    dat <- data.table(id=1:8,
      group=c(1,1,2,2,2,3,3,3), 
      val=c(4,10,5,10,10,6,10,10)
      )  
    
    dat %>%
      group_by(group) %>%
      mutate(dif = abs(first(val)-val))
    
    #># A tibble: 8 x 4
    #># Groups:   group [3]
    #>     id group   val   dif
    #>  <int> <dbl> <dbl> <dbl>
    #>1     1  1.00  4.00  0   
    #>2     2  1.00 10.0   6.00
    #>3     3  2.00  5.00  0   
    #>4     4  2.00 10.0   5.00
    #>5     5  2.00 10.0   5.00
    #>6     6  3.00  6.00  0   
    #>7     7  3.00 10.0   4.00
    #>8     8  3.00 10.0   4.00
    

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多