R中比較難重點(diǎn)但復(fù)雜的幾個(gè)函數(shù)
示例數(shù)據(jù)
library(tidyverse)
diamonds
> x <- colnames(diamonds)[1:5]
> x
[1] "carat" "cut" "color" "clarity" "depth"
> y <- colnames(diamonds)[1:10]
> y
[1] "carat" "cut" "color" "clarity" "depth" "table" "price" "x" "y"
[10] "z"
> z <- colnames(diamonds)[seq(1,10,2)] # seq:seq(from,to,length),該函數(shù)的意思是生成一組數(shù)字,從from開始,到to結(jié)束,每兩個(gè)數(shù)間的間隔是length,如
> z
[1] "carat" "color" "depth" "price" "y"
①match
匹配兩個(gè)向量,返回第二個(gè)向量在第一個(gè)向量匹配位置的下標(biāo)志
>match(x,y)
[1] 1 2 3 4 5
>match(y,x)
[1] 1 2 3 4 5 NA NA NA NA NA
②%in%
x%in%y: 判斷x的每個(gè)元素在y中是否存在
z %in% x
[1] TRUE TRUE TRUE FALSE FALSE
③merge
merge(x, y, by = intersect(names(x), names(y)),
by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
sort = TRUE, suffixes = c(".x",".y"), no.dups = TRUE,
incomparables = NULL, …)
#x, y: 數(shù)據(jù)框
#by, by.x, by.y:指定兩個(gè)數(shù)據(jù)框中匹配列名稱,默認(rèn)情況下使用兩個(gè)數(shù)據(jù)框中相同列名稱。
#all:邏輯值; all = L 是 all.x = L 和 all.y = L 的簡寫,L 可以是 TRUE 或 FALSE。
#all.x:邏輯值,默認(rèn)為 FALSE。如果為 TRUE, 顯示 x 中匹配的行,即便 y 中沒有對應(yīng)匹配的行,y 中沒有匹配的行用 NA 來表示。
#all.y:邏輯值,默認(rèn)為 FALSE。如果為 TRUE, 顯示 y 中匹配的行,即便 x 中沒有對應(yīng)匹配的行,x 中沒有匹配的行用 NA 來表示。
#sort:邏輯值,是否對列進(jìn)行排序。
④apply
apply(X, MARGIN, FUN, ...)
將一個(gè)函數(shù)同時(shí)作用于一個(gè)數(shù)組或者矩陣的一個(gè)margin(margin用來指定是對行運(yùn)算還是對列運(yùn)算,margin=1表示對行運(yùn)算,margin=2表示對列運(yùn)算),F(xiàn)UN用來指定運(yùn)算函數(shù);...用來指定FUN中需要的其它參數(shù)。
>x <- matrix(1:12, ncol=3)
> x
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
> apply(x, 1, sum) ## 行和
[1] 15 18 21 24
> apply(x, 2, sum) ## 列和
[1] 10 26 42
> apply(x, 1, mean) ## 行平均
[1] 5 6 7 8
> apply(x, 2, mean) ## 列平均
[1] 2.5 6.5 10.5