【问题标题】:Means based on column基于列的均值
【发布时间】:2020-10-26 10:41:10
【问题描述】:

我想根据索引计算以下数据框的平均值。我的数据有以下形式。

  index  t1  t2  t3  t4
    10   1    4   7   10
    20   2    5   8   11
    30   3    6   9   0
    40   1    0   0   0

我定义了以下步骤来计算索引列的均值:

Step 1:基于时间步长求和列:

 index  t1   t2  t3  t4  sum
    10  1    4   7   10  22
    20  2    5   8   11  26
    30  3    6   9   0   18
    40  0    1   0   0   1

Step 2:在sum变量之后创建一个数据框来计算index的均值

    10 20 30 40 
    10 20 30 
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20 30
    10 20
    10 20
    10 20
    10 20
       20
       20
       20
       20

我不知道如何在第 2 步创建 df(例如如何根据总和值返回出现次数)


数据样本:

df<-structure(list(index=c (10,20,30,40), 
                   t1 = c(1, 2, 3, 1), 
                   t2 = c(4, 5, 6, 0), 
                   t3 = c(7, 8,9,  0),
                   t4 = c(10, 11, 0, 0)), row.names = c(NA,4L), class = "data.frame")

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    您可以使用rowSums 获取sum 行,然后重复索引值sum 次。

    df$sum <- rowSums(df[-1])
    lst <- Map(rep, df$index, df$sum)
    sapply(lst, `[`, 1:max(lengths(lst)))
    
    #      [,1] [,2] [,3] [,4]
    # [1,]   10   20   30   40
    # [2,]   10   20   30   NA
    # [3,]   10   20   30   NA
    # [4,]   10   20   30   NA
    # [5,]   10   20   30   NA
    # [6,]   10   20   30   NA
    # [7,]   10   20   30   NA
    # [8,]   10   20   30   NA
    # [9,]   10   20   30   NA
    #[10,]   10   20   30   NA
    #[11,]   10   20   30   NA
    #[12,]   10   20   30   NA
    #[13,]   10   20   30   NA
    #[14,]   10   20   30   NA
    #[15,]   10   20   30   NA
    #[16,]   10   20   30   NA
    #[17,]   10   20   30   NA
    #[18,]   10   20   30   NA
    #[19,]   10   20   NA   NA
    #[20,]   10   20   NA   NA
    #[21,]   10   20   NA   NA
    #[22,]   10   20   NA   NA
    #[23,]   NA   20   NA   NA
    #[24,]   NA   20   NA   NA
    #[25,]   NA   20   NA   NA
    #[26,]   NA   20   NA   NA
    

    【讨论】:

      【解决方案2】:

      一个基于 R 的解决方案,在最后返回一个 Dataframe。

      x <- rep(df$index, rowSums(df[-1]))
      x <- split(x,x)
      x <- lapply(x, `length<-`, max(lengths(x)))
      data.frame(x)
      #>    X10 X20 X30 X40
      #> 1   10  20  30  40
      #> 2   10  20  30  NA
      #> 3   10  20  30  NA
      #> 4   10  20  30  NA
      #> 5   10  20  30  NA
      #> 6   10  20  30  NA
      #> 7   10  20  30  NA
      #> 8   10  20  30  NA
      #> 9   10  20  30  NA
      #> 10  10  20  30  NA
      #> 11  10  20  30  NA
      #> 12  10  20  30  NA
      #> 13  10  20  30  NA
      #> 14  10  20  30  NA
      #> 15  10  20  30  NA
      #> 16  10  20  30  NA
      #> 17  10  20  30  NA
      #> 18  10  20  30  NA
      #> 19  10  20  NA  NA
      #> 20  10  20  NA  NA
      #> 21  10  20  NA  NA
      #> 22  10  20  NA  NA
      #> 23  NA  20  NA  NA
      #> 24  NA  20  NA  NA
      #> 25  NA  20  NA  NA
      #> 26  NA  20  NA  NA
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-28
        • 2021-05-11
        • 2020-06-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多