如何根据多个条件为每个id分配类

问题描述 投票:0回答:1

我对 R 比较陌生,从 stackoverflow 得到了很多帮助!!

我有超过 1000 个人的数据表达了某些条件。 每个变量由连续变量或分类变量组成。 我必须根据 3 个条件(Q1、Q2、Q3)的组合给每个人贴上“类”(A、B、C 类) 的标签 但是,每个条件都由变量的值决定。 有点复杂。

例如,

我的数据是这样的

       var1    var2    var3    var4    var5
id1     1       10       1       0      1.5
id2     0       20       0       2      2.4
id3     0       15       0       1      3.5
id4     1       30       1       1      2.1
.
.
id1000  1       25       1       0      1.2

3个条件(Q1,Q2,Q3)是这样的

        Q1          Q2       Q3     
var1    1           .        0
var2   15>      15≤ & <25    >25
var3    1           .        0
var4    2           1        0
var5   <2.0         .       ≥2.0

Class由每个id的以下内容决定

-If two or more Q1 conditions exist  -> class A
-'one Q1 and more than one Q2' or 'more than two Q2' -> class B
-else -> class C 

例如, id1变量(V1~V5)条件分别为Q1、Q1、Q1、Q3、Q1。因为 id1 中存在两个以上的 Q1,所以 id1 的类将是 A.

我在谷歌上搜索了很多天,但很难找到解决方案。 如果条件的数量是两个(Q1,Q2),这会容易得多,但不幸的是有 3 个条件。 我尝试应用 ifelse 语句,但我认为在这种情况下不适用

r if-statement classification multiple-conditions
1个回答
0
投票

这有点复杂,但您应该能够使用

case_when()
dplyr 包中的函数 将您的“规则”应用于每个 id,即

library(tidyverse)

df <- read.table(text = "       var1    var2    var3    var4    var5
id1     1       10       1       0      1.5
id2     0       20       0       2      2.4
id3     0       15       0       1      3.5
id4     1       30       1       1      2.1", header = TRUE)

df %>%
  rowwise() %>%
  mutate(class = case_when(sum(var1 == 1, var2 > 15, var3 == 1, var4 == 2, var5 < 2.0) >= 2 ~ "class A",
                           sum(var1 == 1, var2 > 15, var3 == 1, var4 == 2, var5 < 2.0) == 1 &
                             sum((var2 >= 15 & var2 < 25), var4 == 1) > 1 ~ "class B",
                           TRUE ~ "class C"))
#> # A tibble: 4 × 6
#> # Rowwise: 
#>    var1  var2  var3  var4  var5 class  
#>   <int> <int> <int> <int> <dbl> <chr>  
#> 1     1    10     1     0   1.5 class A
#> 2     0    20     0     2   2.4 class A
#> 3     0    15     0     1   3.5 class C
#> 4     1    30     1     1   2.1 class A

创建于 2023-05-19 与 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.