gpt4 book ai didi

r - 使用 "any"函数跨多个列的逻辑函数

转载 作者:行者123 更新时间:2023-12-02 02:04:40 25 4
gpt4 key购买 nike

我想跨许多列运行逻辑运算(多个条件)。我写了一个运行良好的查询。但是,我想缩短我的代码,因为我必须编写多个查询。

我尝试使用“any”和“括号”来缩短查询。然而,第二个查询运行良好,但给了我不同的答案。 “任意”函数是否适用于多列?

这是我的条件 -

  1. 任意列(B2 到 B5)具有 1 和 B1 <=2,则“无问题”
  2. 任意一列(B2 到 B5)的值为 -99 且 B1 <=2,则“无问题”
  3. B1 ==3,则“无问题”
  4. 休息就是问题
<表类=“s-表”><标题>参与B1B2B3B4B5查询1查询2 <正文>3-1-1-1-1-1没问题没问题1-11-1-11没问题没问题1-1-1-1-1-1问题没问题2-111-11没问题没问题21111-1没问题没问题1-99-99-99-99-99没问题没问题

如果有人帮助我减少使用不同函数的代码行,我将不胜感激。

 mutate(Batch_v1, 
case_when (
((Batch_v1$B1 == 1 | Batch_v1$B2 == 1 | Batch_v1$B3 == 1 | Batch_v1$B4 == 1 | Batch_v1$B5 == 1| Batch_v1$B6 == 1| Batch_v1$B7 == 1|Batch_v1$B8 == 1|Batch_v1$B9 == 1|Batch_v1$B10 == 1|Batch_v1$BOth == 1) &
Batch_v1$Participate %in% c(1,2,-99))~"Noissue",
((Batch_v1$B1 == -99 | Batch_v1$B2 == -99 | Batch_v1$B3 == -99|Batch_v1$B4 == -99 |Batch_v1$B5 == -99|Batch_v1$B6 == -99|Batch_v1$B7 == -99|Batch_v1$B8 == 1|Batch_v1$B9 == -99|Batch_v1$B10 == -99|Batch_v1$BOth == -99) &
Batch_v1$Participate %in% c(1,2,-99))~"Noissue",
Batch_v1$Participate ==3 ~ "Noissue",
TRUE ~ "Issue"))





mutate(Batch_v1,
case_when (
((any(Batch_v1[,2:6] == 1)) & Batch_v1$Participate %in% c(1,2,-99))~ "Noissue",
((any(Batch_v1[,2:6] == -99)) & Batch_v1$Participate %in% c(1,2,-99))~ "Noissue",
Batch_v1$Participate ==3 ~ "Noissue",
TRUE ~ "Issue"))

最佳答案

我们可以将 acrosscase_when 一起使用

library(dplyr)
df %>%
mutate(across(B2:B5, ~case_when(. == 1 & B1 <=2 ~ "Noissue",
. == -99 & B1 <=2 ~ "Noissue",
B1 == 3 ~ "Noissue",
TRUE ~ "issue")
)
)

输出:

  Participate    B1 B2      B3      B4      B5      Query1  Query2 
<dbl> <dbl> <chr> <chr> <chr> <chr> <chr> <chr>
1 3 -1 issue issue issue issue Noissue Noissue
2 1 -1 Noissue issue issue Noissue Noissue Noissue
3 1 -1 issue issue issue issue Issue Noissue
4 2 -1 Noissue Noissue issue Noissue Noissue Noissue
5 2 1 Noissue Noissue Noissue issue Noissue Noissue
6 1 -99 Noissue Noissue Noissue Noissue Noissue Noissue

数据:

df <- structure(list(Participate = c(3, 1, 1, 2, 2, 1), B1 = c(-1, 
-1, -1, -1, 1, -99), B2 = c(-1, 1, -1, 1, 1, -99), B3 = c(-1,
-1, -1, 1, 1, -99), B4 = c(-1, -1, -1, -1, 1, -99), B5 = c(-1,
1, -1, 1, -1, -99), Query1 = c("Noissue", "Noissue", "Issue",
"Noissue", "Noissue", "Noissue"), Query2 = c("Noissue", "Noissue",
"Noissue", "Noissue", "Noissue", "Noissue")), problems = structure(list(
row = 6L, col = "Query2", expected = "", actual = "embedded null",
file = "'test'"), row.names = c(NA, -1L), class = c("tbl_df",
"tbl", "data.frame")), class = c("spec_tbl_df", "tbl_df", "tbl",
"data.frame"), row.names = c(NA, -6L))

关于r - 使用 "any"函数跨多个列的逻辑函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68590887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com