首页 > 解决方案 > 如何通过比较其他两个变量来创建新变量

问题描述

我必须根据其他两个变量中存在的值创建一个名为 coorbidity 的变量并将其添加到数据框中

现在我有名为诊断的数据框,其变量如下

v1 <- c(222,250,255,250.23)

v2 <- c(300,369,400,450)

现在如果 v1 不是 b/w 250-250.99 并且 v2 不是 b/w 390-490 那么新变量中的值 0

如果 v1 是 b/w 250-250.99 并且 v2 不是 b/w 390-490,则新变量 1 中的值

如果 v1 不是 b/w 250-250.99 而 v2 是 b/w 390-490,则新变量 2 中的值

如果 v1 是 b/w 250-250.99 并且 v2 是 b/w 390-490 那么新变量 3 中的值

我已经尝试ifelse并编写了一个巨大的代码,但它没有给出我下面代码的理想答案部分

diabetic_maindf$comorbidity_1_2 <- 
if_else((diagnosis$v1 == diagnosis$v2 ),0,

if_else((diagnosis$v1 == 1 | diagnosis$v2 == 0),1, 

if_else((diagnosis$v1 == 0 & diagnosis$v2 == 1),1,

我想要带有第三个变量的数据框如下

v1 <- c(222,250,255,250.23)

v2 <- c(300,369,400,450)

new_var <- c(0,1,2,3)

PS:新手不知道怎么用表格写,不好意思....

标签: r

解决方案


interaction当存在类似功能时,不需要逐步执行此操作:

interaction(v1 >= 250 & v1 <= 250.99, v2 >= 390 & v2 <= 490)
#[1] FALSE.FALSE TRUE.FALSE  FALSE.TRUE  TRUE.TRUE  
#Levels: FALSE.FALSE TRUE.FALSE FALSE.TRUE TRUE.TRUE

c(0,1,2,3)[interaction(v1 >= 250 & v1 <= 250.99, v2 >= 390 & v2 <= 490)]
#[1] 0 1 2 3

这种逻辑的好处是它将扩展到n比较,同时只编写n语句而不是2^n显式比较。


推荐阅读