我对 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 语句,但我认为在这种情况下不适用
这有点复杂,但您应该能够使用
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