【问题标题】:R: Sum every n rows of one column of data frameR:对一列数据框的每n行求和
【发布时间】:2018-08-14 20:21:50
【问题描述】:

我希望在数据框(数据)的一列中每 5 行数据求和,以在第 6 行显示前 5 行的总和(见下表)。我尝试了以下 dplyr,它返回整行中所有总值的总和,rate2 列作为向量。

data$rate2<-
  ifelse(data$age!="Overall", data$rate,
  ifelse(data$age=="Overall",
       data %>%
       group_by(data$state,data$year)%>%
       summarise_at(vars(rate),
                     sum, na.rm=TRUE),
 ifelse(data$age,is.na(), NA)))

此代码返回以下结果:

State    Age         Year    rate     rate2
GA        5          2015     .4        .4
GA        6          2015     .4        .4
GA        7          2015     .5        .5
GA        8          2015     .2        .2
GA        9          2015     .3        .3
GA        Overall    2015              c(1.8,7.5)
GA        5          2016     1.0      1.0
GA        6          2016     2.0      2.0
GA        7          2016      .5       .5
GA        8          2016     1.0      1.0
GA        9          2016     3.0      3.0
GA        Overall    2016              c(1.8,7.5) 

是否有一种方法可以计算“整体”行的 rate2 列中的单个值。我不确定通过使用循环是否可以更好地实现这一点。为清楚起见,我需要能够使用 rate2 列的“Overall”行中的值来对另一列执行后续计算。

State    Age         Year    rate     rate2
GA        5          2015     .4        .4
GA        6          2015     .4        .4
GA        7          2015     .5        .5
GA        8          2015     .2        .2
GA        9          2015     .3        .3
GA        Overall    2015              1.8
GA        5          2016     1.0      1.0
GA        6          2016     2.0      2.0
GA        7          2016      .5       .5
GA        8          2016     1.0      1.0
GA        9          2016     3.0      3.0
GA        Overall    2016              7.5 

任何帮助将不胜感激!提前谢谢!

【问题讨论】:

  • 能否提供dput(data)格式的输入数据?
  • 将其设为列而不是新行不是更好吗?
  • 签出zoo::rollsum
  • 如果您首先为组创建一个 id 列,那么 groupingsets 可能会这样做:stackoverflow.com/a/45759773
  • 抱歉,这太可怕了。始终以整洁的数据为目标。 @Frank 的建议是如果你觉得你必须这样做的话。

标签: r sum tidyverse


【解决方案1】:

似乎是一种奇怪的数据结构。但是,如果我理解正确,您需要获取每年的“总体”值以执行一些后续任务,然后使用假设的数据框:

library(data.table)
library(tidyverse)

data <- fread ("
           State    Age         Year    rate     rate2
           GA        5          2015     .4        .4
           GA        6          2015     .4        .4
           GA        7          2015     .5        .5
           GA        8          2015     .2        .2
           GA        9          2015     .3        .3
           GA        Overall    2015     NA       NA
           GA        5          2016     1.0      1.0
           GA        6          2016     2.0      2.0
           GA        7          2016      .5       .5
           GA        8          2016     1.0      1.0
           GA        9          2016     3.0      3.0
           GA        Overall    2016     NA       NA 
           ")

data %>% 
  filter(Age != "Overall") %>% 
  group_by(Year) %>% 
  summarize(Overall = sum(rate2, na.rm = T))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 2016-03-21
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多