【问题标题】:Calculate average real variability for successive multiple measurements in R计算 R 中连续多次测量的平均实际可变性
【发布时间】:2022-11-14 09:13:09
【问题描述】:

我有一个长格式的数据框,一列 (B) 包括列 (A) 中值之间的绝对连续差异,分别用于每个人的 ID。

ID = c("1", "1", "1", "1", "1", "1", "1", "2", "2", "2", "2", "2", "2")
A = c("120", "115", "125", "119", "128", "129", "130", "140", "142", "143", "145", "144", "148")
B = c("NA", "5", "10", "6", "9", "1", "1", "NA", "2", "1", "2", "1", "4")

DF <- data.frame(ID, A, B)

我想创建一个新列 (C),即每个值之前和包括每个值的绝对差之和除以(用于计算它的测量次数减去 1)。
这就是我希望数据的样子:

我希望这是有道理的,非常感谢任何帮助!

【问题讨论】:

    标签: r lag


    【解决方案1】:

    这是一个整洁的解决方案。您可以先group_byID,然后将B 的累积和(cumsum)除以row_number 减一。您只能在省略每个组的第一行并将其替换为NA 后执行此操作

    另请注意,在您的示例中,“数字”列实际上是字符向量,因此必须先强制​​转换为数字。

    library(tidyverse)
    
    DF %>%
      mutate(across(A:B, (x) suppressWarnings(as.numeric(x)))) %>%
      group_by(ID) %>%
      mutate(C = c(NA, cumsum(B[-1])/(row_number() - 1)[-1]))
    #> # A tibble: 13 x 4
    #> # Groups:   ID [2]
    #>    ID        A     B     C
    #>    <chr> <dbl> <dbl> <dbl>
    #>  1 1       120    NA NA   
    #>  2 1       115     5  5   
    #>  3 1       125    10  7.5 
    #>  4 1       119     6  7   
    #>  5 1       128     9  7.5 
    #>  6 1       129     1  6.2 
    #>  7 1       130     1  5.33
    #>  8 2       140    NA NA   
    #>  9 2       142     2  2   
    #> 10 2       143     1  1.5 
    #> 11 2       145     2  1.67
    #> 12 2       144     1  1.5 
    #> 13 2       148     4  2
    

    创建于 2022 年 11 月 11 日,reprex v2.0.2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多