以下是可重复性的数据集:
a=c(90.41,37.37,18.98)
b=c(103.39,39.44,51.68)
c=c(83.51,36.41,47.46)
d=c(94.60,38.57,50.22)
e=c(95.04,38.81,50.49)
xx=t(data.frame(a,b,c,d,e))
df=data.frame(xx)
这是我试图在数据框上运行的if / else函数
classify=function(df){
if (df>=110) {
class="5"}
else if (df<110 & df>=103){
class="4"}
else if (df<103 & df>=95){
class="3"}
else if (df<95 & df>=76){
class="2"}
else if (df<76){
class="1"}
else {class="none"}
}
但是,我想要生成的if / else函数是一个新的数据框,如下所示:
df
X1 X2 X3
a 2 1 1
b 4 1 1
c 2 1 1
d 2 1 1
e 3 1 1
我不确定如何做到这一点,所以任何帮助都会受到超级赞赏。我预计if / else函数本身有问题,但我很缺乏经验,我不知道如何轻松地检测脚本中的错误。谢谢!
答案 0 :(得分:5)
sapply(df, function(x) {as.numeric(as.character(cut(x, c(-Inf,76,95,103,110,Inf), seq(1:5))))})
X1 X2 X3
[1,] 2 1 1
[2,] 4 1 1
[3,] 2 1 1
[4,] 2 1 1
[5,] 3 1 1
使用cut设置间隔(第二个参数)和标签(第三个参数)。但是,它会返回一个因子,因此如果您愿意,请转换回数字。由于您希望在整个数据帧上运行该函数,请使用sapply或lapply。
答案 1 :(得分:2)
您可以使用@FXML
void minimize(MouseEvent event) {
Stage stage=(Stage) iconMinimize.getScene().getWindow();
stage.setIconified(true);
}
执行此操作。你所要做的就是传递一个非递减的断点向量。
findInterval
答案 2 :(得分:2)
使用"XYZ":{any white space}"{any set of digits}@{anychars}",
中的case_when
:
dplyr
万一:
library(dplyr)
classify <- function(x){
case_when(
x >= 110 ~ "5",
x >= 103 & x < 110 ~ "4",
x >= 95 & x < 103 ~ "3",
x >= 76 & x < 95 ~ "2",
x < 76 ~ "1",
TRUE ~ "none"
)
}
a = c(90.41, 37.37, 18.98)
b = c(103.39, 39.44, 51.68)
c = c(83.51, 36.41, 47.46)
d = c(94.60, 38.57, 50.22)
e = c(95.04, 38.81, 50.49)
df <- data.frame(matrix(c(a, b, c, d, e), ncol = 3, byrow = T))
mutate_all(df, classify)
# X1 X2 X3
#1 2 1 1
#2 4 1 1
#3 2 1 1
#4 2 1 1
#5 3 1 1
结果如下:
df
# X1 X2 X3
#1 -Inf 37.37 18.98
#2 103.39 NaN 51.68
#3 83.51 36.41 47.46
#4 94.60 Inf 50.22
#5 95.04 38.81 NA