条件循环时的情况
Case when with condition loop
我是 R 的新手。我写了一个案例,但我想参数化,因为我并不总是有 n = 5。
可能吗?
iris
iris$id_1 = sample(1:10)
iris$id_2 = sample(1:10)
iris$id_3 = sample(1:10)
iris$id_4 = sample(1:10)
iris$id_5 = sample(1:10)
x = 3
iris <-
iris %>%
mutate(
segmento =
case_when(
id_5 >= x ~ 5,
id_4 >= x ~ 4,
id_3 >= x ~ 3,
id_2 >= x ~ 2,
id_1 >= x ~ 1,
)
)
问题是我并不总是 5 "id"。有时我有 3,代码将是:
iris <-
iris %>%
mutate(
segmento =
case_when(
id_3 >= x ~ 3,
id_2 >= x ~ 2,
id_1 >= x ~ 1,
)
)
然后我需要对其进行参数化。
谢谢
而不是使用多个case_when
,根据描述,我们可以这样做(如果我们正在比较列名中的数字,提取该数字与sub
,进行比较并得到逻辑矩阵上 max.col
的列索引。在这里,我们指定 last
,这样如果我们有一行 c(FALSE, TRUE, TRUE, TRUE)
,它给出的列索引为 4
nm1 <- grep("^id_\d+", names(df), value = TRUE)
max.col(df[nm1] >= as.numeric(sub("id_", "", nm1))[col(df[nm1])], "last")
基于更新后的 post 和 'iris' 示例
nm1 <- grep("^id_\d+", names(iris), value = TRUE)
max.col(iris[nm1] >= x, "last")
我是 R 的新手。我写了一个案例,但我想参数化,因为我并不总是有 n = 5。 可能吗?
iris
iris$id_1 = sample(1:10)
iris$id_2 = sample(1:10)
iris$id_3 = sample(1:10)
iris$id_4 = sample(1:10)
iris$id_5 = sample(1:10)
x = 3
iris <-
iris %>%
mutate(
segmento =
case_when(
id_5 >= x ~ 5,
id_4 >= x ~ 4,
id_3 >= x ~ 3,
id_2 >= x ~ 2,
id_1 >= x ~ 1,
)
)
问题是我并不总是 5 "id"。有时我有 3,代码将是:
iris <-
iris %>%
mutate(
segmento =
case_when(
id_3 >= x ~ 3,
id_2 >= x ~ 2,
id_1 >= x ~ 1,
)
)
然后我需要对其进行参数化。
谢谢
而不是使用多个case_when
,根据描述,我们可以这样做(如果我们正在比较列名中的数字,提取该数字与sub
,进行比较并得到逻辑矩阵上 max.col
的列索引。在这里,我们指定 last
,这样如果我们有一行 c(FALSE, TRUE, TRUE, TRUE)
,它给出的列索引为 4
nm1 <- grep("^id_\d+", names(df), value = TRUE)
max.col(df[nm1] >= as.numeric(sub("id_", "", nm1))[col(df[nm1])], "last")
基于更新后的 post 和 'iris' 示例
nm1 <- grep("^id_\d+", names(iris), value = TRUE)
max.col(iris[nm1] >= x, "last")