Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 匹配运算符行为异常_R_Dplyr_Operators_Match - Fatal编程技术网

R 匹配运算符行为异常

R 匹配运算符行为异常,r,dplyr,operators,match,R,Dplyr,Operators,Match,所以我有一个数据框: BMI<-c(18,25.2,31.5,19.6,11.1,25.2) AGE<-c(21,35,45,60,99,21) df<-data_frame(BMI,AGE) BMI操作符%中的%是match的包装。它不查看值的范围,而是尝试在向量中查找值的匹配项。它们不必是数字。例如: 库(tidyverse) 信件[1:6] #>[1]“a”“b”“c”“d”“e”“f” “e”%以%字母[1:6]表示 #>[1]是的 如果您有18:29,您将创建一个

所以我有一个数据框:

BMI<-c(18,25.2,31.5,19.6,11.1,25.2)
AGE<-c(21,35,45,60,99,21)
df<-data_frame(BMI,AGE)

BMI操作符%
中的
%是
match
的包装。它不查看值的范围,而是尝试在向量中查找值的匹配项。它们不必是数字。例如:

库(tidyverse)
信件[1:6]
#>[1]“a”“b”“c”“d”“e”“f”
“e”%以%字母[1:6]表示
#>[1]是的
如果您有
18:29
,您将创建一个整数向量,然后在该向量中查找BMI值的匹配项。这就是为什么BMI=18会得到
TRUE
,因为确切的数字在该向量中,但25.2不在该向量中,所以它返回
FALSE

如果打印出要测试的向量,则更容易查看:

30:50
#>  [1] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
30:50时为35%
#>[1]是的
18:29
#>  [1] 18 19 20 21 22 23 24 25 26 27 28 29
25.2%为18:29
#>[1]错误
既然你想知道一个值是否在两个数之间的连续范围内,你可以使用不等式:

df%>%
变异(中等=(体重指数>=18&BMI#不稳定指数:6 x 3
#>体重指数年龄中等
#>      
#>1 18 21正确
#>2 25.2 35正确
#>3 31.5 45错误
#>4 19.6 60正确
#>5 11.1 99错误
#>6 25.2 21正确
dplyr::between
,它是上述不等式的简写,包括其端点

df%>%
突变(中等=介于(BMI,18,29)之间)
#>#tibble:6 x 3
#>体重指数年龄中等
#>      
#>1 18 21正确
#>2 25.2 35正确
#>3 31.5 45错误
#>4 19.6 60正确
#>5 11.1 99错误
#>6 25.2 21正确

还值得注意的是,如果您只是试图返回一个逻辑值,您可以跳过
ifelse
,因为这些检查方法中的任何一种都将返回一个逻辑值。

可能使用
between
?(
dplyr
包)BMI是数字浮点pooint ad
18:29
给出整数值,它正在检查这些值是否完全匹配,但事实并非如此
df<-df%>%mutate(MediumAge=if_else(AGE%in%30:50,TRUE,FALSE))
df<-df%>%mutate(Medium=if_else(BMI%in%18:29,TRUE,FALSE))