【问题标题】:How to sum every nth (200) observation in a data frame using R [duplicate]如何使用 R 对数据框中的每 n 个(200)个观察值求和 [重复]
【发布时间】:2019-02-19 17:03:37
【问题描述】:

我是 R 新手,非常感谢任何帮助!

我的 10 个变量中的每一个都有一个包含 278800 个观察值的数据框,我正在尝试创建第 11 个变量,该变量对特定变量/列的每 200 个观察值(或行)求和(sum(1:200, 201: 399, 400:599 等)类似于 excel 中的偏移功能。 我尝试将我的数据子集化为感兴趣的变量,目的是添加一个新变量,该变量每 200 行连续求和,但我无法弄清楚。我知道我的新“变量”将产生 1,394 个数据点 (278,800/200)。我尝试使用 rollapply 函数,但输出的总和不是 200 块,而是 1:200、2:201、3:202 等)

谢谢,

E

【问题讨论】:

    标签: r offset rollapply rowsum


    【解决方案1】:

    rollapply 有一个 by= 参数。这是一个使用 n = 3 而不是 n = 200 的较小示例。请注意 1+2+3=6、4+5+6=15、7+8+9=24 和 10+11+12=33。

    # test data
    DF <- data.frame(x = 1:12)
    
    library(zoo)
    n <- 3
    rollapply(DF$x, n, sum, by = n)
    ## [1]  6 15 24 33
    

    【讨论】:

      【解决方案2】:

      首先让我们生成一些数据并为每个组获取一个标签:

      library(tidyverse)
      df <-
        rnorm(1000) %>% 
        as_tibble() %>% 
        mutate(grp = floor(1 + (row_number() - 1) / 200))
      
      > df
      # A tibble: 1,000 x 2
          value   grp
           <dbl> <dbl>
       1  -1.06      1
       2   0.668     1
       3  -2.02      1
       4   1.21      1
      ...
      1000 0.78      5
      

      这会创建 1000 个随机的 N(0,1) 个变量,将其转换为一个数据框,然后为每组 200 个添加一个递增的数字标签。

      df %>% 
        group_by(grp) %>% 
        summarize(grp_sum = sum(value))
      
      # A tibble: 5 x 2
          grp grp_sum
        <dbl>   <dbl>
      1     1    9.63
      2     2  -12.8 
      3     3  -18.8 
      4     4   -8.93
      5     5  -25.9 
      

      然后我们只需要对第二列进行分组操作并对值求和。您可以使用 pull() 操作来获取结果的向量:

      df %>% 
        group_by(grp) %>% 
        summarize(grp_sum = sum(value)) %>% 
        pull(grp_sum)
      [1]   9.62529 -12.75193 -18.81967  -8.93466 -25.90523
      

      【讨论】:

        【解决方案3】:

        我创建了一个包含 278800 个观测值的向量 (a)

         a<- rnorm(278800)    
         b<-NULL #initializing the column of interest 
         j<-1 
         for (i in seq(1,length(a),by=200)){
         b[j]<-sum(a[i:i+199]) #b is your column of interest
         j<-j+1
         }
         View(b)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-05-28
          • 1970-01-01
          • 2021-07-25
          • 2021-07-23
          • 1970-01-01
          • 2021-06-25
          • 1970-01-01
          相关资源
          最近更新 更多