r - R:如何为我的数据集创建特定的循环和 ifelse 语句。(附数据集)
问题描述
我是 R 新手,我想就可以帮助我执行复杂任务的代码类型征求您的意见。我有一组包含通过或失败值的变量。基于这些值,测试函数应该完成下面编写的任务:
检查是否正常 == 失败,如果为真,则创建一个名为 test 的新列,将“失败”插入该特定情况的列中。
如果正常 == 失败,则为假,检查从 PD 到 SA == 失败。如果为真,则将“失败”插入在步骤 1 中创建的名为 test 的列中。
如果 PD to SA == Fail 为假,则将“通过”插入在步骤 1 中创建的名为 test 的列中。
应跳过特定情况下的任何 NA。
理想情况下,最后的表格应如下所示: 示例 1
从示例 1 可以看出,即使 normal == pass,因为 TH == Fail,测试列的最终结果是“失败”。
在示例 2中,从正常到 SA 的所有值 == 通过,测试列的最终结果 ==“通过”。
最后在示例 3中,因为 normal == "Fail",测试列的最终结果 == "Fail"。
我一直在尝试创建这个函数并遍历我数据集中的 2000 个案例。但没有一个奏效。任何帮助将不胜感激。我已将链接附加到问题中的数据集以供参考。 https://drive.google.com/file/d/1nd0c99kuMiUdjhiKxNHK-j5TY9de9vbX/view?usp=sharing
解决方案
使用 dplyr 和case_when
:
library(dplyr)
data %>%
mutate(Test=case_when(
Normal=="Fail" ~ "Fail",
Normal!="Fail" & rowSums(select(., PD:SA) == "Fail", na.rm=TRUE) > 0 ~ "Fail",
Normal=="Pass" ~ "Pass"))
# A tibble: 2,490 x 9
Normal PD MP TH Py KA VT SA Test
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 Pass Pass Pass Fail Pass Pass Pass Pass Fail
2 Pass Pass Fail Pass Pass Pass Pass Pass Fail
3 Fail Pass Pass Pass Pass Pass Pass Fail Fail
4 Pass Fail Pass Pass Pass Pass Pass Pass Fail
5 Fail Pass Fail Pass Pass Pass Fail Pass Fail
6 Pass Pass Fail Fail Pass Pass Fail Pass Fail
7 Pass Pass Fail Pass Pass Pass Pass Pass Fail
8 Fail Pass Fail Pass Pass Pass Pass Pass Fail
9 Pass Fail Fail Pass Pass Pass Fail Pass Fail
10 Pass Pass Pass Fail Pass Pass Fail Pass Fail
# ... with 2,480 more rows
我必须找到一些通行证:
%>%
filter(Test=="Pass")
# A tibble: 257 x 9
Normal PD MP TH Py KA VT SA Test
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 Pass Pass Pass Pass Pass Pass Pass Pass Pass
2 Pass Pass Pass Pass Pass Pass Pass Pass Pass
3 Pass Pass Pass Pass Pass Pass Pass Pass Pass
4 Pass Pass Pass Pass Pass Pass Pass Pass Pass
5 Pass Pass Pass Pass Pass Pass Pass Pass Pass
还有一些<NA>
。这个脱颖而出(#541):
%>% slice(541)
# A tibble: 1 x 9
Normal PD MP TH Py KA VT SA Test
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 Pass Pass Fail Fail NA Pass Fail Pass Fail
最后的表格给出:
%>% count(Test)
# A tibble: 3 x 2
# Groups: Test [3]
Test n
<chr> <int>
1 Fail 2144
2 Pass 256
3 NA 90
资料:
dput(head(data, 100))
data <- structure(list(Normal = c("Pass", "Pass", "Fail", "Pass", "Fail",
"Pass", "Pass", "Fail", "Pass", "Pass", "Fail", "Fail", "Pass",
"Pass", "Fail", "Fail", "Pass", "Pass", "Fail", "Pass", "Fail",
"Pass", "Pass", "Fail", "Fail", "Fail", "Fail", "Pass", "Fail",
"Fail", "Pass", "Pass", "Fail", "Pass", "Pass", "Pass", "Fail",
"Pass", "Pass", "Pass", "Fail", "Pass", "Pass", "Pass", "Pass",
"Fail", "Pass", "Fail", "Pass", "Pass", "Pass", "Fail", "Pass",
"Pass", "Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Fail", "Fail", "Fail", "Fail", "Fail", "Fail",
"Fail", "Fail", "Pass", "Fail", "Pass", "Fail", "Pass", "Pass",
"Fail", "Fail", "Pass", "Pass", "Fail", "Pass", "Fail", "Fail",
"Pass", "Pass", "Fail", NA, "Pass", "Fail", "Pass", "Fail", "Fail",
"Pass", "Pass", "Fail", "Fail", "Fail", "Pass"), PD = c("Pass",
"Pass", "Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Fail",
"Pass", "Pass", "Pass", "Pass", "Pass", "Fail", "Pass", "Pass",
"Pass", "Fail", "Pass", "Pass", "Pass", "Fail", "Pass", "Fail",
"Fail", "Fail", "Fail", "Pass", "Pass", "Fail", "Pass", "Fail",
"Pass", "Fail", "Pass", "Pass", "Fail", "Pass", "Pass", "Fail",
"Pass", "Fail", "Fail", "Fail", "Pass", "Fail", "Fail", "Pass",
"Fail", "Pass", "Fail", "Fail", "Pass", "Pass", "Pass", "Fail",
"Fail", "Fail", "Fail", "Pass", "Pass", "Pass", "Fail", "Pass",
"Fail", "Pass", "Fail", "Fail", "Pass", "Fail", "Pass", "Fail",
"Pass", "Pass", "Pass", "Fail", "Fail", "Pass", "Pass", "Fail",
"Pass", "Fail", "Fail", "Fail", "Fail", "Fail", "Pass", NA, "Pass",
"Pass", "Fail", "Fail", "Fail", "Fail", "Fail", "Pass", "Fail",
"Pass", "Fail"), MP = c("Pass", "Fail", "Pass", "Pass", "Fail",
"Fail", "Fail", "Fail", "Fail", "Pass", "Fail", "Fail", "Fail",
"Fail", "Pass", "Pass", "Pass", "Pass", "Pass", "Fail", "Fail",
"Pass", "Pass", "Fail", "Pass", "Pass", "Pass", "Fail", "Pass",
"Pass", "Fail", "Pass", "Pass", "Fail", "Fail", "Fail", "Pass",
"Fail", "Pass", "Pass", "Pass", "Pass", "Fail", "Pass", "Fail",
"Fail", "Fail", "Pass", "Fail", "Fail", "Fail", "Pass", "Fail",
"Fail", "Fail", "Pass", "Fail", "Pass", "Fail", "Pass", "Pass",
"Pass", "Pass", "Pass", "Fail", "Pass", "Fail", "Pass", "Pass",
"Pass", "Pass", "Fail", "Fail", "Fail", "Fail", "Pass", "Fail",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Fail", "Fail", "Fail", NA, "Pass", "Pass", "Fail", "Pass", "Fail",
"Pass", "Fail", "Pass", "Pass", "Fail", "Fail"), TH = c("Fail",
"Pass", "Pass", "Pass", "Pass", "Fail", "Pass", "Pass", "Pass",
"Fail", "Pass", "Fail", "Fail", "Pass", "Fail", "Pass", "Fail",
"Pass", "Pass", "Pass", "Fail", "Fail", "Pass", "Pass", "Fail",
"Fail", "Fail", "Pass", "Fail", "Pass", "Pass", "Fail", "Pass",
"Fail", "Pass", "Pass", "Fail", "Fail", "Fail", "Pass", "Fail",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Fail", "Pass",
"Fail", "Fail", "Pass", "Pass", "Pass", "Fail", "Pass", "Pass",
"Fail", "Pass", "Pass", "Pass", "Fail", "Fail", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Fail", "Pass", "Pass",
"Pass", "Pass", "Fail", "Pass", "Fail", "Fail", "Pass", "Pass",
"Pass", "Pass", "Fail", "Fail", "Pass", "Pass", "Pass", NA, "Pass",
"Pass", "Fail", "Pass", "Fail", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass"), Py = c("Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", NA, "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass"), KA = c("Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", NA, "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass"), VT = c("Pass", "Pass", "Pass", "Pass", "Fail",
"Fail", "Pass", "Pass", "Fail", "Fail", "Fail", "Fail", "Pass",
"Fail", "Fail", "Pass", "Fail", "Pass", "Fail", "Pass", "Fail",
"Fail", "Pass", "Fail", "Fail", "Fail", "Fail", "Pass", "Fail",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Fail", "Fail", "Pass", "Pass", "Fail", "Pass",
"Pass", "Pass", "Pass", "Pass", "Fail", "Pass", "Fail", "Fail",
"Fail", "Pass", "Fail", "Pass", "Fail", "Fail", "Pass", "Pass",
"Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Fail", "Fail",
"Pass", "Fail", "Fail", "Fail", "Pass", "Fail", "Pass", "Fail",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Fail", "Fail", NA, "Pass", "Fail", "Pass", "Fail", "Fail",
"Pass", "Pass", "Fail", "Fail", "Fail", "Fail"), SA = c("Pass",
"Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Fail", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Fail", "Pass", "Pass", "Fail", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", NA, "Pass",
"Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass", "Pass",
"Pass", "Pass")), row.names = c(NA, -100L), class = c("tbl_df",
"tbl", "data.frame"))
推荐阅读
- azureservicebus - 具有服务总线自定义触发器的逻辑应用
- uwp - StorageFile 类型不在 Windows.Storage 中
- javascript - react.js antd modal错误行为
- javascript - Express 路由错误,'Router.post 需要回调函数'
- php - PHP循环在本地主机上工作,但在服务器上
- r - Caret 包不适用于 3.4.2 版
- c# - .NET 浮点运算在 x64 调试和发布之间是否一致?
- c - 无法在 c 和 excel 中获得相同的答案并具有相同的功能
- swift - 通过 Vapor Fluent-MySQL 中的迁移更改 VARCHAR 字段
- swift - 如何将 Int8 转换为字符?