在R Studio中使用ifelse和min / max将数学方程式转换为代码

时间:2017-08-18 17:55:34

标签: r if-statement max min medical

对于医学研究,我想计算eGFR,一种衡量肾功能的方法,其等式需要一定的输入值:Scr(血清肌酐),ScysC(血清胱抑素C),年龄和性别依赖值,这些都在我的数据集中可用。

请参阅附图中的方程式。 eGFR equation

所以我主要是在使用ifelse语句和最小/最大数字。如何使用此等式创建用于检索输出的代码?

我的第一个想法是创建一个循环函数,但我不确切知道如何。所以任何帮助和时间都非常感谢:)

CNC中 注意:最小/最大值之间的比率始终<1是很重要的。 例如Scr = 0.9的雌性给出Scr / k = 0.9 / 0.7 = 1.28,得到min = 1且max = 1.28。 Scr = 0.6的雌性给出Scr / k = 0.6 / 0.7 = 0.86,得到min = 0.86且max = 1.

以下是我的数据示例:

df <- data.frame(ID = c(1,2,3), AGE = c(36,36, 36), 
    CYSC = c(0.757, 1.34, 1.34), SCR = c(0.58, 0.68, 0.68), SEX = c(1,1,0)) 
        #Male = 1, Female 0

#equation:
eGFR = 135*((min(Scr/k,1)**a))*((max(Scr/k,1)**-0.601))*(min(Scysc/0.8,1)**-0.375)* (max(Scysc/0.8,1)**-0.711) * (0.995**Age) (*0.969 if female)

(With k=0.7 if F and k=0.9 if M, a=-0.248 if F and a=-0.207 if M)

1 个答案:

答案 0 :(得分:1)

好的,所以我猜测你的data.frame的结构。我提供了如何创建我的测试,因为似乎有比row.names更多的数字。我还假设1是男性,0是女性。最后,我添加了第三位女性患者进行测试,其临床结果与男性#2相同。

df <- data.frame(ID = c(1,2,3), AGE = c(36,36, 36), CYSC = c(51.614, 47.669, 47.669), SCR = c(0.75776, 1.34, 1.34), SEX = c(1,1,0))

male.idx <- df$SEX == 1

k <- rep(0.7, nrow(df))
k[male.idx] <- 0.9

a <- rep(-0.248, nrow(df))
a[male.idx] <- -0.207

eGFR <- 135*pmin(df$SCR/k,1)**a*((pmax(df$SCR/k,1)**-0.601))*(pmin(df$CYSC/0.8,1)**-0.375)* 
    (pmax(df$CYSC/0.8,1)**-0.711) * ifelse(male.idx, 0.995, 0.969)**df$AGE

[编辑以获得更准确的答案]

相关问题