如何用NA按组对变量求和?

时间:2019-01-30 10:51:59

标签: r statistics

我有一个像这样的大数据集:

ID    Number
153    31
       28
       31
       30
104    31
       30
254    31
266    31

,我想通过包含NA的ID计算总和。我的意思是说:

    ID   Number
    153   120
    104   61
    254   31
    266   31

我尝试了aggregate,但没有得到预期的结果。一些帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

一个选择是将空格转换为NA,然后fill将NA元素替换为“ ID”中非NA相邻元素,并按“ ID”分组,得到{{1 }}的“数字”

sum

或者不使用library(tidyverse) df1 %>% mutate(ID = na_if(ID, "")) %>% fill(ID) %>% group_by(ID) %>% summarise(Number = sum(Number)) # A tibble: 4 x 2 # ID Number # <chr> <int> #1 104 61 #2 153 120 #3 254 31 #4 266 31 ,使用逻辑表达式和fill创建一个分组变量,然后执行cumsum

sum

数据

df1 %>% 
  group_by(grp = cumsum(ID != "")) %>% 
  summarise(ID = first(ID), Number = sum(Number)) %>% 
  select(-grp)

答案 1 :(得分:1)

或者直接做:) by

cbind(df1[df1$ID != "", "ID", drop = FALSE], 
      Number = rev(diff(c(0, rev((rev(cumsum(rev(df1$Number)))[df1$ID != ""]))))))