%in%, sort, rank, order, match你晕了没有

写在前面的话
● 以上都是R语言的函数,不要以为函数一定是XXX(), 长得奇怪的%in%, [], +, -, <,>都是函数,不要歧视这些
● 要理解函数的用法,就是要知道 I/O (Input/Output)输入和输出
● 当然要了解I/O, 最好的办法就是上机操作该函数,就是把各种稀奇古怪的input扔进去,观察output,进行深刻理解

%in% 是一个需要前后 都要有输入的函数,前后的输入都是向量,x %in% y 的意义是 向量x在y中么
输入: 向量x和向量y; 输出: 向量x长度一个逻辑向量, 向量x中元素在y中就是TRUE, 无就是FALSE。

x = c(1,3,5,1)
y = c(3,2,5,6)
x %in% y            # 返回x长度的逻辑向量, x 的每个元素在y中存在吗  x in y 么 ? 
[1] FALSE  TRUE  TRUE FALSE

sort(x) 是对向量x进行排序的函数
输入: 向量x,输出: 如果x是数值向量,输出为升序排序后的数值向量,如果x是字符向量,输出为字母顺序的字符向量

scores = c(100,59,73,95,45)
sort(scores)

[1]  45  59  73  95 100

x <- c("C","D","A","B","E")
sort(x)

[1] "A" "B" "C" "D" "E"

rank(x) 是求向量元素秩的函数
输入: 向量x,输出: 这个向量中对应元素的升序排名值的向量, 注意:输入可以是字符向量,输出可能会有小数

scores = c(100,59,73,95,45)
rank(scores)
[1] 5 2 3 4 1

scores = c(100,59,73,95,45,59)
rank(scores)
[1] 6.0 2.5 4.0 5.0 1.0 2.5

x <- c("C","D","A","B","E","B")
rank(x)
[1] 4.0 5.0 1.0 2.5 6.0 2.5

order(x) 是求向量元素排名后,对应原向量位置的函数
输入: 向量x,输出: 升序排列后,对应的元素所在原向量x中的索引号向量,注意:sort(x)等同于x[order(x)],输出是自然数向量;向量x中有相同值的元素,早出现的在输出中越靠前

scores = c(59,100,59,73,95,45,59)
order(scores)
[1] 6 1 3 7 4 5 2
scores[order(scores)]
[1]  45  59  59  59  73  95 100

match(x,y) 是求向量x的元素, 在向量y中位置的函数
输入: 向量x 和 向量y,输出: 一个与向量x等长的向量,但是它并非返回逻辑向量,而是遍历了向量x里面的一个个元素,判断它们是否在向量y中出现过,如果出现就返回在y中的索引号,如果没有出现,就返回NA。向量x为模板向量,y中元素向x看齐

x <- c("A","B","C","D","E");x
[1] "A" "B" "C" "D" "E"

y <- c("B","D","E","A","C") ;y
[1] "B" "D" "E" "A" "C"

match(x,y)  
[1] 4 1 5 2 3
y[match(x,y)] 
[1] "A" "B" "C" "D" "E"

#######################################
x <- c("A","B","C","D","E","F");x
[1] "A" "B" "C" "D" "E" "F"
y <- c("B","D","E","A","C") ;y
[1] "B" "D" "E" "A" "C"
match(x,y) 
[1]  4  1  5  2  3 NA
y[match(x,y)] 
[1] "A" "B" "C" "D" "E" NA 

y[match(x,y)] 使用口诀 “谁在外面就在后面,中间是模板”,

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容