r - 根据第二列计算/汇总 2 行的新变量给出 NA
问题描述
我希望得到群体智能的帮助!在准备跨不同时间点的实验室值的数据框时,我遇到了以下问题。我的数据框是由 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 就会给我所需的计算值。知道如何解决这个问题吗?
解决方案
正如@Martin Gal 在您正在使用的地方=
而不是==
当前您正在使用的地方所提到的,(x-y/x)
但是您想要的(x-y)/x
是不同的。
我还建议使用match
而不是==
进行比较,因为如果数据中没有或,match
则会返回一个。NA
"t3"
"t0"
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')
推荐阅读
- javascript - 服务器如何在google oauth2.0中安全地向客户端发送访问令牌
- arduino - Arduino + sim800l + dht11
- c++ - 如何安装 Qt 核心?
- google-apps-script - 使用 Deepl API 和谷歌表格
- james - 让 apache james 接受发往任何子域的传入邮件
- swift - 使用 mpeg4AppleHLS swift 的视频时间不正确
- c - 在 C 语言中没有任何循环就可以打印数组吗?
- c++ - 获取输入时,halfdelay() 和 cbreak() + timeout() 有什么区别?
- node.js - 当我 POST 到 MongoDB 时,只保存 _id 并且
- javascript - React Native - 如何监听权限变化?