R 语言 逻辑运算:TRUE/FALSE |
您所在的位置:网站首页 › R语言中trace=F › R 语言 逻辑运算:TRUE/FALSE |
![]() 逻辑运算是数学运算的重要组成部分,但其更是计算机计算的底层设置。作为一门数据处理语言,逻辑运算在R中承担着非常非常重要的作用。本专题就专门为大家整理一下R语言中的逻辑运算:TRUE/FALSE. 目录 1 基本逻辑运算符 2 异或(xor) 3 all()和any() 4 实例拆解:如何筛选非零列? 正文 1 基本逻辑运算符 注:这里将数学运算符也整理了一下,权当回顾一下。 类别 运算符 描述 数学运算符 x + y 加法 x - y 减法 x * y 乘法 x / y 除法 x ^ y或x ^**y 乘幂 x %% y 模运算 x %/% y 整数除法 逻辑运算符 x == y 判断是否相等【严格等于,区别于赋值“=”】 = y 判断是否大于等于 x & y 向量的逻辑“与”运算(x、y以及运算结果都是向量) X | y 向量的逻辑“或”运算(x、y以及运算结果都是向量) x && y 标量的逻辑“与”运算(返回标量) x || y 标量的逻辑“或”运算(返回标量) !x 逻辑非 补充 xor(x,y) 异或:xor(T,F)返回TRUE all(x) all()是在全部为TURE时返回T, any(x) any()是存在任何一个TRUE时返回TRUE R语言逻辑运算中额外注意2点 (1)逻辑值TRUE和FALSE可以缩写为T和F(两者都必须大写);在算术表达式中,它们会转换为1和0。 (2)在R中,所有非零值在逻辑运算中都会被当作为TRUE。 代码语言:javascript复制> TRUE & FALSE #返回[1] FALSE > 0.2 & 0 #返回[1] FALSE(3)在R语言中标量常被看作含有一个元素的向量,但在逻辑运算中是存在差异。上表中逻辑“与”【&】和逻辑“或”【 | 】是对向量的逻辑运算(虽然单个标量也适用),但其返回的结果是逻辑向量,是对逻辑运算中的每一组元素进行逻辑运算后返回的结果。 因此,此处引入另外两个不常用但需要了解的逻辑运算符: x&&y:标量的逻辑“与”运算,判断逻辑x和y中只要包含一个"&"运算的TRUE行即返回TRUE标量 x||y :标量的逻辑“或”运算,判断逻辑向量x和y中包含一个"|"运算TRUE行即可返回TRUE标量示例1:比较&与&& 代码语言:javascript复制> x y #---比较&与&&---# > x&y [1] TRUE FALSE FALSE FALSE > > x&&y #对比第9行结果可以发现,在逻辑向量逻辑运算中只要包含一个"&"运算的TRUE行即返回TRUE [1] TRUE > x[c(2,3,4)]&&y[c(2,3,4)] [1] FALSE > x[1]&&y[1] #x[1] TRUE和y[1] TRUE [1] TRUE > x[2]&&y[2] #x[2] FALSE和y[2] TRUE [1] FALSE > x[4]&&y[4] #x[4] FALSE和y[4] FALSE [1] FALSE示例2:比较"|"与"||" 代码语言:javascript复制> x y > #---比较|与||---# > x|y [1] TRUE TRUE TRUE FALSE > > x||y #判断逻辑向量x和y中包含一个"|"运算TRUE行即可返回TRUE [1] TRUE > > x[1]||y[1] #x[1] TRUE和y[1] TRUE [1] TRUE > x[2]||y[2] #x[2] FALSE和y[2] TRUE [1] TRUE > x[4]||y[4] #x[4] FALSE和y[4] FALSE [1] FALSE2 异或(xor) 说明:当对应元素不等时返回TRUE。例如: xor(T,F)返回TRUExor(T,T)返回FALSExor(F,F)返回FALSE代码语言:javascript复制#xor异或:当对应元素不等时返回TRUE > x y xor(x,y) [1] FALSE TRUE TRUE FALSE3 all()和any() 判断数据中是否存在TRUE值,其中all()是在全部为TURE时返回T,any是在存在任何一个TRUE时返回TRUE 注意事项: (1)all(all(x), all(y)) == all(x, y) (2)logical(0)返回TRUE 代码语言:javascript复制> x all(x) #all中,如果所有均为TRUE,返回TRUE;反之,返回FALSE [1] FALSE > any(x) #anyl中,如果任一值为TRUE,返回TRUE;反之,返回FALSE [1] TRUE #多变量all或any > y all(x,y) [1] FALSE > all(all(x),all(y)) #all(all(x), all(y)) == all(x, y) [1] FALSE > any(x,y) #x,y中存在任意一个TRUE,即返回TRUE [1] TRUE4 实例拆解:如何筛选非零列? 示例1:apply + !+ all x[,apply(x,2,function(x) !all(x==0))] 来自于知乎回答者@HopeR 代码语言:javascript复制> df x x X1 X2 X3 X4 X5 1 0 0 0 0 0 2 -1 0 1 2 3 > #来自于知乎回答者@HopeR :x[,apply(x,2,function(x) !all(x==0))] #apply(x,2,function(x) !all(x==0)) #对x数据库做列操作,判断每一列中的所有元素是否为0,,然后渠非"!" # X1 X2 X3 X4 X5 # TRUE FALSE TRUE TRUE TRUE > > x[,apply(x,2,function(x) !all(x==0))] X1 X3 X4 X5 1 0 0 0 0 2 -1 1 2 3示例2:purrr包(tidyverse) purrr::discard(df, ~all(.x == 0)) purrr::keep(df, ~any(.x != 0)) 来自花儿少年交流群 代码语言:javascript复制> x df library(tidyverse) #或library(purrr) -- Attaching packages --------------------------------------- tidyverse 1.2.1 -- √ ggplot2 3.2.0 √ purrr 0.3.2 √ tibble 2.1.3 √ dplyr 0.8.3 √ tidyr 0.8.3 √ stringr 1.4.0 √ readr 1.3.1 √ forcats 0.4.0 -- Conflicts ------------------------------------------ tidyverse_conflicts() -- x dplyr::filter() masks stats::filter() x dplyr::lag() masks stats::lag() > purrr::discard(df, ~all(.x == 0)) X1 X3 X4 X5 1 0 0 0 0 2 -1 1 2 3 > purrr::keep(df, ~any(.x != 0)) X1 X3 X4 X5 1 0 0 0 0 2 -1 1 2 3![]() 注图片来自于tidyverse网站:https://www.tidyverse.org/ 示例3:自建函数 + ifelse 来自拴小林(这个确实自己被搞复杂了) 代码语言:javascript复制#---生成包含全0列数据集————## x |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |