首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一数据帧中聚合具有不同ID的sum obs

问在同一数据帧中聚合具有不同ID的sum obs
EN

Stack Overflow用户
提问于 2019-05-24 20:30:00
回答 1查看 47关注 0票数 0

我的目标是通过使用日期(数据集按日期和chr nr( ID )排序)将当天的观测值和同一ID中的所有先前观测值相加,从而创建另一列。当一个新的"id“出现时,我需要重新开始聚合。

可能存在某些NA,应将其视为空

"Doseringer_pr_kg_dyr“是观察值。

代码语言:javascript
复制
CHR_NR    DATO_AFSLUT    Doseringer_pr_kg_dyr    brugstid 
10358    2018-08-06    29416.67    31   
10358    2018-09-06    104682.27    36 
10358    2018-10-12    10333.33    26   
10358    2018-11-07    10090.91    27   
10358    2018-12-04    8000.00    NA   
13168    2012-01-23    12042.25    2   
13168    2012-01-25    9000.00    42 
13168    2012-03-07    44450.70    19
13168    2012-03-26    35000.00    37 
13168    2012-05-02    93478.26    70

我期待的是:

代码语言:javascript
复制
CHR_NR    DATO_AFSLUT    Doseringer_pr_kg_dyr    brugstid     sum
10358  2018-11-07    10090.91    27    [108,6]+[109,3]  
10358  2018-12-04    8000.00    NA    [109,6]+[110,3]
13168  2012-01-23    12042.25    2    [111,3]
13168  2012-01-25    9000.00    42    [111,6]+[112,3]
13168  2012-03-07    44450.70    19    [112,6]+[113,3]

其中,行、列+行、列在新列中求和。

我想到了一个应用函数或一个循环,比如:

代码语言:javascript
复制
agg<-function(dat) {
  last_row <- 0
  for ( row in dat ) {
    if ( row[1] == last_row[1] ) {
      row[6] <- last_row[6] + row[3]
    } else { 
      row[6] <- row[3]
    }
    last_row <- row
  }
}

来自评论:

代码语言:javascript
复制
# dput(head(a)) 
a <- structure(list(CHR_NR = c(10358, 10358, 10358, 10358, 10358, 10358), 
  DATO_AFSLUT = structure(c(15349, 15387, 15426, 15441, 15455, 15476), 
  Level = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real ), 
  Doseringer_pr_kg_dyr = c(276152.688936271, 161616.695196052, 127549.514333096, 13333.3333333333, 86255.3897180763, 31034.1151385928 ), 
  brugstid = c(38, 39, 15, 14, 21, 15), 
  i = c(7267.17602463871, 4144.01782553979, 8503.30095553976, 952.380952380952, 4107.39951038459, 2068.94100923952)), 
  row.names = 6:11, class = "data.frame")
EN

回答 1

Stack Overflow用户

发布于 2019-06-07 19:05:23

a$Doseringer_pr_kg_dyr[is.na(a$Doseringer_pr_kg_dyr)]<-0 a$x<-ave(a$Doseringer_pr_kg_dyr,a$CHR_NR,FUN = cumsum)

其中x是累加值,"ave“将累加值分组为CHR。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56292735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档