【问题标题】:Determine a characteristic by evaluating two df - R通过评估两个 df - R 来确定特征
【发布时间】:2020-07-27 20:49:40
【问题描述】:

我一直在使用两个 df,一个是现场回忆的信息,另一个是诊断表

Name<-c("Mario", "Pedro", "Julia", "Jazmin")
Weight<-c("110","50","67","80")
Pacients<- data.frame(Name, Weight)

 Pacients$Name $Weight
  <fct>         <fct>  
1 Mario         110    
2 Pedro         50     
3 Julia         67     
4 Jazmin        80  

Min_W<-c("45", "66", "76", "86", "101")
Max_W<-c("65","75","85","100","150")
Dx<-c("underw","inrange","preob","ob","morb")
W_Table<- data.frame(Min_W, Max_W, Dx)

W_Table$Min_W $Max_W $Dx    
  <fct>         <fct>  <fct>  
1 45            65     underw 
2 66            75     inrange
3 76            85     preob  
4 86            100    ob     
5 101           150    morb   

我一直在尝试使用 mutateifelse 之类的函数,但我一直遇到只返回一个值的问题。 返回应该是这样的

Pacients_Dx$Name $Weight $Dx    
  <fct>            <fct>   <fct>  
1 Mario            110     morb   
2 Pedro            50      underw 
3 Julia            67      inrange
4 Jazmin           80      preob   

【问题讨论】:

标签: r if-statement dplyr


【解决方案1】:

试试这个。

w_table = rep("", max(as.numeric(W_Table$Max_W)))
for (i in 1:nrow(W_Table)) {
    for (j in W_Table[i, 1]:W_Table[i, 2]) {
        w_table[j] = W_Table[i, 3]
    }
}
Pacients$Dx = apply(Pacients, 1, 
                function(x) return(w_table[as.numeric(x[2])]))

【讨论】:

    【解决方案2】:

    在基础 R 中,您可以使用 findInterval:

    transform(Pacients,Dx=with(W_Table,Dx[findInterval(Weight,as.numeric(c(Min_W[1],Max_W)))]))
    
        Name Weight      Dx
    1  Mario    110    morb
    2  Pedro     50  underw
    3  Julia     67 inrange
    4 Jazmin     80   preob
    

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 2013-03-05
      • 1970-01-01
      • 2019-05-03
      • 2019-05-05
      • 2016-05-19
      • 2017-06-26
      • 1970-01-01
      • 2012-11-17
      相关资源
      最近更新 更多