【问题标题】:Calculate/Summarize new variable of 2 rows depending on second column gives NA根据第二列计算/汇总 2 行的新变量给出 NA
【发布时间】:2021-09-23 21:11:18
【问题描述】:

我希望得到群体智能的帮助! 在准备跨不同时间点的实验室值的数据框时,我遇到了以下问题。 我的数据框是由 5 个变量组成的长格式:受试者 ID (sid)、时间点 (zeitpunkt)、临床试验的干预组 (gruppe)、实验室参数 (parameter)、参数的实际值 (messwert) 和值的单位(einheit)。

    A tibble: 6 x 6
    sid zeitpunkt gruppe parameter                      messwert einheit
  <dbl> <chr>     <chr>  <chr>                             <dbl> <chr>  
1     1 t0        DGE    ACPA(citrull. Prot.-Ak) EIA/Se  1000    U/ml   
2     1 t3        DGE    ACPA(citrull. Prot.-Ak) EIA/Se  1000    U/ml   
3     1 t2        DGE    Apolipoprot. A1 HP                 1.31 g/l    
4     1 t2        DGE    Apolipoprotein B                   0.61 g/l    
5     1 t0        DGE    aPTT Pathromtin SL                34.3  sek.   
6     1 t1        DGE    aPTT Pathromtin SL                37.3  sek.   
> 

我现在想比较每个人从基线 (t0) 到最后一个时间点 (t3) 的每个参数值的百分比变化,以便我可以从角度比较两种干预措施的平均值。有问题的:有些值缺失,有些可能存在两次,但在实验室测量两次或样品缺失的情况下略有不同。此外,某些参数仅在基线时进行评估。

我试图通过将这个新变量汇总为一个新变量来计算百分比变化

    dataframe: labor_change <-
      labor_long %>%
      group_by(sid, gruppe, parameter, zeitpunkt) %>%
      arrange(sid, parameter, zeitpunkt)%>%
      summarize(messwert=mean(messwert))%>%
      ungroup()%>%
      group_by(sid, gruppe, parameter) %>%
      summarize(changet3t0 =
                  (messwert[zeitpunkt == "t3"]-messwert[zeitpunkt = "t0"]/messwert[zeitpunkt == "t0"])*100)

我现在的问题:一旦我在代码中使用来自两个不同时间点(也就是 2 个不同的行,在第二个变量“时间点”中不同)的值,R 就会返回我所需的数据帧,但只填充 NA:

# Groups:   sid, gruppe, parameter [6]
    sid gruppe parameter             changet3t0
  <dbl> <chr>  <chr>                      <dbl>
1     1 DGE    aPTT Pathromtin SL            NA
2     1 DGE    Basophile %                   NA
3     1 DGE    Basophile absolut             NA
4     1 DGE    Calcium                       NA
5     1 DGE    Creatinkinase (CK) HP         NA
6     1 DGE    CRP HP                        NA
> 

只要我从计算中消除一个时间点,R 就会给我所需的计算值。知道如何解决这个问题吗?

【问题讨论】:

  • 如果没有t3怎么办?使用t2t[max_value]?
  • (messwert[zeitpunkt == "t3"]-messwert[zeitpunkt = "t0"]/messwert[zeitpunkt == "t0"]) 应该是(messwert[zeitpunkt == "t3"]-messwert[zeitpunkt == "t0"])/messwert[zeitpunkt == "t0"]:缺少一个=,您必须将) 放在不同的位置。您的代码(或多或少)相当于messwert[zeitpunkt == "t3"] - 1
  • 如果没有 t3 它应该只返回 NA。非常感谢您的帮助,我认为我的问题是错字!
  • Viel Erfolg noch!

标签: r dplyr na calculated-columns summarize


【解决方案1】:

正如@Martin Gal 在某处提到的,您使用的是= 而不是==,而目前您使用的是(x-y/x),但您想要的是(x-y)/x,这是不同的。

我还建议使用match 而不是== 进行比较,因为如果数据中没有"t3""t0"match 将返回NA

library(dplyr)

labor_change  <- labor_long %>%
  group_by(sid, gruppe, parameter, zeitpunkt) %>%
  arrange(sid, parameter, zeitpunkt)%>%
  summarize(messwert=mean(messwert))%>%
  group_by(sid, gruppe, parameter) %>%
  summarize(changet3t0 = (messwert[match('t3', zeitpunkt)]-messwert[match("t0", zeitpunkt)])/
              messwert[match("t0",zeitpunkt)]*100, .groups = 'drop')

【讨论】:

  • 非常感谢罗纳克!我想我只是监督了错字,因此将代码修改为“匹配”。非常感谢!!
  • 很高兴知道,感谢您对stackoverflow的快速介绍;-)
猜你喜欢
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 2021-08-07
相关资源
最近更新 更多