%in%小测试
%in%是生信技能树生信爆款入门课程R语言部分的讲到的一个重要知识点。
为加深理解,现在找一个数据集做下练习巩固,。
简单介绍
%in%用来判断前面一个向量内的元素是否在后面一个向量中,返回布尔值
准备数据
> library(tidyverse)
> diamonds
# A tibble: 53,940 x 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63
5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47
8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53
9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49
10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39
# ... with 53,930 more rows
生成2个向量
> x <- sort(unique(diamonds$carat)[1:10])
> x#10个数值
[1] 0.20 0.21 0.22 0.23 0.24 0.26 0.29 0.30 0.31 0.32
> y <- x[1:5]
> y#5个数值
[1] 0.20 0.21 0.22 0.23 0.24
生成2个数据框
> a <- data.frame(cut = sort(unique(diamonds$price)[1:10]))
> a
cut
1 326
2 327
3 334
4 335
5 336
6 337
7 338
8 339
9 340
10 342
> b <- data.frame(cut = sort(unique(diamonds$price)[1:5]))
> b
cut
1 326
2 327
3 334
4 335
5 336
1.判断y中的元素是否都在x中
> y %in% x
[1] TRUE TRUE TRUE TRUE TRUE
2.判断x中的元素是否都在y中
> x %in% y
[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
3.提取x中与y相同的元素
> x[x %in% y]
[1] 0.20 0.21 0.22 0.23 0.24
4提取y中与x相同的元素
> y[y %in% x]
[1] 0.20 0.21 0.22 0.23 0.24
5.提取x中与y不相同的元素
> x[!(x %in% y)]
[1] 0.26 0.29 0.30 0.31 0.32
> #注意非符号“!”位于整个语句之前,而非%in%之前。
> #match函数与%in%的功能相似,都可以进行匹配操作。
> #不同的是:match函数返回的是索引(即匹配单元的位置号),%in%返回的是逻辑值(T&F)
6.找出数据框b中与a相同的元素
> b$cut[b$cut %in% a$cut]
[1] 326 327 334 335 336
7.找出数据框a中与b不同的元素
> a$cut[!(a$cut %in% b$cut)]
[1] 337 338 339 340 342
8.使用%in%计算下x中有多少个数值与y相同?
> sum(x %in% y)
[1] 5
9.使用%in%计算下x中有多少个数值与y不相同?
> sum(!(x %in% y))
[1] 5
10.将数据框a与b不同的元素都修改为100。
> a$cut[!(a$cut %in% b$cut)] <- 100
> a
cut
1 326
2 327
3 334
4 335
5 336
6 100
7 100
8 100
9 100
10 100