我试图运行“ if”和“ else if”条件,以基于两个现有变量的值创建一个新变量。这是我正在写条件的两个现有变量的示例输出。
这里是复制两个变量的输出:
structure(list(C = c(NA, NA, "Standard", "Standard", NA, "Micro",
NA, NA, NA, NA, "Nursery", "Standard", NA, "Micro", "Micro",
NA, NA, NA, "Standard", "Standard"), P = c(NA, NA, "Standard",
"Standard", NA, NA, NA, NA, NA, NA, NA, "Standard", "Standard",
"Micro", NA, NA, NA, NA, NA, "Standard")), row.names = c(NA,
-20L), class = c("tbl_df", "tbl", "data.frame"))
这是我正在使用的if和else if语句:
if (DF$C=="Standard" | DF$P=="Standard") {
mutate("Type" = "Standard")
} else if (DF$C=="Micro" | DF$P=="Micro") {
mutate("Type" = "Micro")
} else if (DF$C=="Nursery" | DF$P=="Nursery") {
mutate("Type" = "Nursery")
} else {
mutate("Type" = "Other")
}
我想要的是一个名为“ Type”的新变量,其值为“ Standard”,“ Micro”,“ Nursery”或“ Other”,但我却收到了此错误消息:
Error in if (Site.Details.TEST$C == "Standard" | Site.Details.TEST$P == :
missing value where TRUE/FALSE needed
In addition: Warning message:
In if (Site.Details.TEST$C == "Standard" | Site.Details.TEST$P == :
the condition has length > 1 and only the first element will be used
答案 0 :(得分:0)
也许在dplyr
中像这样进行矢量化处理的东西可以解决问题。基本上,您希望查看C
或P
字段中是否满足三个匹配项(“标准”,“微型”或“苗圃”)之一。如果满足,则采用该匹配值。如果两列都不匹配,则编码为“其他”。
假设C
和P
不能是不同的东西,这可以工作。如果是,则优先考虑C
。
library(dplyr)
check_types <- c("Standard", "Micro", "Nursery")
DF %>%
mutate(Type = if_else(C %in% check_types | P %in% check_types, if_else(is.na(C), P, C), "Other"))
C P Type
<chr> <chr> <chr>
1 NA NA Other
2 NA NA Other
3 Standard Standard Standard
4 Standard Standard Standard
5 NA NA Other
if_else(condition, true, false)
语句查找矢量化条件,然后查找true
和false
的单个值,或与条件相同长度的矢量化值。在这种情况下:
条件:
C %in% check_types | P %in% check_types
这是一个向量,长度等于数据帧中的行数。向量中的每个位置都基于dplyr
在相应行上的评估。
如果TRUE
是C
中的选项之一,或者check_types
是P
中的选项之一,则值为check_types
。否则将为FALSE
true:
if_else(is.na(C), P, C)
如果该语句的计算结果为TRUE
,则现在检查以获取哪个值。如果(再次在给定的矢量点或行处)C
为NA
,则取P
。否则,请使用C
。
否:
"Other"
如果该语句的计算结果为FALSE
,则将值设为“其他”。
答案 1 :(得分:0)
这与以前的答案几乎相同:
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="Jeu.css">
</head>
<body>
<canvas id="canvas" width="400" height="400"
style="border-color: 'black'; border-width: 3px; border-style: solid">
</canvas>
<br>
<button type="button"onclick="dessiner()"><img src="Start.jpg"></button>
<script type="text/javascript">
var canvas = document.getElementById("canvas");
var contexte = canvas.getContext("2d");
var x
var y
function ghost(){
ghost= new Image();
ghost.src = "ghost.jpg";
ghost.onload = function(){
contexte.drawImage(ghost,x,y,20,20)
}};
x = 32 +(Math.random() * (400-64));
y = 32 +(Math.random() * (400-64));
function dessiner(){
ghost()
};
</script>
</body>
</html>
答案 2 :(得分:0)
这可以在标准R中使用ifelse
来完成,因为您实际上只想在P和C字段都匹配且不是NA时填充Type字段。
DF$Type <- ifelse( (is.na(DF$P) | is.na(DF$C)) | (DF$P != DF$C), 'Other', DF$C)