我有一个像这样的大数据集:
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
,但没有得到预期的结果。一些帮助将不胜感激
答案 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 != ""]))))))