【问题标题】:R: Creating a new data.frame consisting of the mean of subsets of different length from another data.frameR:创建一个新的data.frame,由来自另一个data.frame的不同长度的子集的平均值组成
【发布时间】:2021-11-01 19:44:01
【问题描述】:

让我们的图像有一个数据框,例如

df<-data.frame(Steps=1:10, Value=20:29)
> df
   Steps Value
1      1    20
2      2    21
3      3    22
4      4    23
5      5    24
6      6    25
7      7    26
8      8    27
9      9    28
10    10    29

我想做的是:

  1. 根据不同的步骤数获取数据帧的不同子集(例如,在 2 个步骤之后或 5 个步骤之后,等等......)。步数是任意决定的,因此它们可以是 1,2 和 3 步或 2,4,7 和 10 步。步数可能覆盖或不覆盖data.frame的整个长度(但如果做整个长度更容易,很好,我可以过滤)
  2. 计算 df$value 的平均值
  3. 创建一个新的 df,包括步数和这些步数的 df$value 的平均值

所以,例如,我想要一个像这样的 df2:

> df2<-data.frame(Steps=c(2,5,10), Value=c(20.5,22,24.5))
> df2
  Steps Value
1     2  20.5
2     5  22.0
3    10  24.5

我只能想到使用 for 循环。有更好的主意吗?

【问题讨论】:

  • 更新了原来的问题。

标签: r dataframe subset


【解决方案1】:
library(tidyverse)
df<-data.frame(Steps=1:10, Value=20:29)

tibble(Steps = c(2, 5, 10),
       Value = map_dbl(Steps,
               ~ df %>%
                 filter(Steps <= .x) %>%
                 pull(Value) %>%
                 mean()
               )
       )
#> # A tibble: 3 × 2
#>   Steps Value
#>   <dbl> <dbl>
#> 1     2  20.5
#> 2     5  22  
#> 3    10  24.5

【讨论】:

    【解决方案2】:

    采取随机长度的随机步骤。

    set.seed(123)
    random_steps <- sort(sample(df$Steps, sample(nrow(df), 1)))
    
    df2 <- data.frame(steps = random_steps, 
                      Value = sapply(random_steps, function(x) mean(df$Value[df$Steps <= x])))
    df2
    
    #  steps Value
    #1     2  20.5
    #2     3  21.0
    #3     6  22.5
    

    【讨论】:

      【解决方案3】:

      您可以使用dplyr::cummean 获取每个步骤的累积平均值,然后使用dplyr::slice 选择您想要查看其累积平均值的行

      library(dplyr, warn.conflicts = FALSE)
      df <- data.frame(Steps = 1:10, Value = 20:29)
      
      df %>%
        mutate(cummean = cummean(Value)) %>%
        slice(2, 5, 10) %>%
        select(Steps, cummean)
      #>   Steps cummean
      #> 1     2    20.5
      #> 2     5    22.0
      #> 3    10    24.5
      

      reprex package (v2.0.1) 于 2021 年 9 月 3 日创建

      【讨论】:

        猜你喜欢
        • 2020-09-25
        • 1970-01-01
        • 2012-04-04
        • 2012-09-07
        • 2014-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多