Basic包是R语言预装的开发包,包含了常用的数据处理函数,可以对数据进行简单地清理和转换,也可以在使用其他转换函数之前,对数据进行预处理,必须熟练掌握常用的数据处理函数。 一,合并向量 函数append()用于修改合并向量,可以把两个向量合并为一个: append(x, values, after = length(x)) 例如:从一个向量的指定位置处,插入另一个向量: > append(1:5, 0:1, after = 3) [1] 1 2 3 0 1 4 5 二,匹配函数 匹配函数(match)返回一个位置向量,表示 x 匹配table的位置。%in% 返回一个逻辑向量,表示左边的操作符是否匹配右边的操作符。 match(x, table, nomatch = NA_integer_, incomparables = NULL) x %in% table 参数注释:
match()函数返回的是一个整数向量,长度和参数x相同,每一个元素的值是x元素第一次匹配table元素的位置,如果x元素不在table向量中,那么相应位置上的元素值是nomatch(nomatch参数指定的值,默认值是NA)。
1,match()函数的用法 match()函数的基本用法 x <- c(3,1,7) tb <- c(-1:5) match(x,tb) [1] 5 3 NA match()函数可以用于批量修改数据框的列名: names(df)[match(c('a',"b", "c)","d"),names(df))]<- c('C1','C2','C3','C4') 2,操作符 %in%的用法 操作符 %in% 返回的是一个逻辑向量,指定x元素是否匹配table元素,其长度和x向量相同。如果x元素能够匹配到table元素,那么相应位置的元素值是TRUE,否则,元素值是FALSE。 操作符 %in% 在底层使用match()函数实现: function(x, table) match(x, table, nomatch = 0) > 0 例如,返回左侧向量的元素匹配右侧向量的逻辑值: > 1:10 %in% c(1,3,5,9) [1] TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE FALSE 三,cut函数 cut()函数用于切割x的范围,每一个范围是一个分区;cut()函数根据分区的顺序对x中的值进行编码,也就是说,每一个分区从左向右依次对应lables向量中的一个因子,最左边的分区对应于lables向量的第一个因子,第二个分区对应lables向量中的第二个因子,以此类推。 cut(x, breaks, labels = NULL,
include.lowest = FALSE, right = TRUE, dig.lab = 3,
ordered_result = FALSE, ...) 参数注释:
示例,breaks是由分割点构成的数字向量,两个连续的分割点指定一个分区的边界点, vc <- c(1:6)
cut(vc,breaks=c(0,2,5,7),labels = c('low','medium','high'))
[1] low low medium medium medium high
Levels: low medium high 默认情况下,分割点属于右侧的分区,因此,2是属于右侧的分区。分割点如何划分x的分区?
每一个分区按照其在breaks中的顺序依次对应lables参数中的一个因子。 四,排名函数 排名函数用于对向量元素进行排名,按照升序的顺序对数据进行排序: rank(x, na.last = TRUE, ties.method = c("average", "first", "last", "random", "max", "min")) 参数注释:
例如,对向量进行排名,把排名的结果存储到变量中: > r1 <- rank(x1 <- c(3, 1, 4, 15, 92))> r1 [1] 2 1 3 4 5 五,替换 函数replace()用于把向量中指定位置的元素替换为指定的值(或向量): replace(x, list, values) 参数注释:
例如,把向量的第1个、第3个和第7个的元素值替换为0: > replace(1:9,c(1,3,7),0) [1] 0 2 0 4 5 6 0 8 9 六,重复 rep()函数把输入的参数重复多次,如果参数是表达式,rep()函数会把表达式的结果重复多次;而replicate()函数是重复调用表达式,每次调用表达式的过程都是独立的,这意味着,如果产生随机数,rep()函数产生的随机数是”伪随机的“,重复第一次产生的随机数,而replicate()函数产生的随机数是真正意义上的随机数,每次都不相同。 > rep(runif(1),5) [1] 0.8721105 0.8721105 0.8721105 0.8721105 0.8721105 > replicate(5,runif(1)) [1] 0.9426709 0.1280271 0.1926333 0.7091503 0.5404846 七,逆转 rev()函数用于把一个向量的元素逆转: > rev(c(1,5,3,7)) [1] 7 3 5 1 八,排序 sort()函数用于对向量排序,返回有序的向量;order()函数返回向量元素的序号,能够用于对data.frame排序: order(..., na.last = TRUE, decreasing = FALSE, method = c("auto", "shell", "radix")) sort(x, decreasing = FALSE, na.last = NA, ...) 例如,使用order()函数按照数据框的y列进行排序: > df <- data.frame(x=c(6,3,7,5),y=c(5,1,7,3))> df x y1 6 52 3 13 7 74 5 3> df[order(df$y),] x y2 3 14 5 31 6 53 7 7 九,删除重复值 使用R去重有两种做法,第一种做法是把返回向量中的唯一值;第二个方法是返回向量中重复元素的位置,然后删除重复元素。 1,删除重复值 unique() 函数用于移除重复数据,用于向量,数据框或数组的去重: unique(x, incomparables = FALSE) 参数 incomparables:用于指定不能比较的值构成的向量。FALSE是一个特殊的值,表示所有的值都可以比较。 2,检查重复值 duplicated()函数用于检查重复的元素,返回元素类型是逻辑值的向量或数据框:当元素的值为FALSE时,表示该元素不是重复值;当元素的值是TRUE时,表示该元素是前面(位置)的某一个元素的重复值。 duplicated(x, incomparables = FALSE, ...) 该函数的处理流程是:下标最小的元素是第一次出现的元素,标记为FALSE,当该元素值再次出现,表明该变量出现重复值,标记该元素为TRUE。 例如,以下代码用于删除数据框df中变量var的重复值: df <- df[!duplicated(df$var),] 十,逻辑TRUE的索引 which()函数,用于从逻辑向量中返回TRUE值在向量中的索引,参数x是一个由逻辑值构成的向量: which(x) 例如,使用which()函数返回逻辑向量中TRUE值的索引: > which(lv <- c(TRUE, FALSE, TRUE, NA, FALSE, FALSE, TRUE)) [1] 1 3 7> which(exper <- c(1:9)>5) [1] 6 7 8 9 十一,构造环境 常用于数据框,使R表达式位于数据框的作用环境中,便于对数据框变量的引用: with(data, expr, ...)
within(data, expr, ...) 这两个函数的区别是:with()函数只能定义一个变量,而within()函数可以定义多个变量: with(mtcars, mpg[cyl == 8 & disp > 350]) #only define one variable mtcars$mpg[mtcars$cyl == 8 & mtcars$disp > 350]#define multiple variablesaq <- within(airquality, { # multiple vars can be changed lOzone <- log(Ozone) Month <- factor(month.abb[Month]) cTemp <- round((Temp - 32) * 5/9, 1) S.cT <- Solar.R / cTemp # using the newly created variable rm(Day, Temp) }) 十二,Reduce函数
Reduce(f, x, init, right = FALSE, accumulate = FALSE) 参数注释:
例如,计算一个向量的累加和,首先,把初始值和向量的第一个元素1传递给sum()函数,计算出结果11,然后,把11和向量的第二个元素传递给函数sum(),计算出结果13,依次类推: > Reduce(sum,1:5,10) [1] 25 Reduce()函数内部执行的过程等价于: a <- sum(10,1) b <- sum(a,2) c <- sum(b,3) d <- sum(c,4) sum(d,5) 十三,条件过滤器 按照条件从向量中选择元素,当条件为TRUE时,把该元素添加到结果向量中。参数 f 是一个返回逻辑值的函数(该函数必须有一个输入参数),参数x是一个向量: Filter(f, x) 例如,从一个数值向量中,选择元素值大于5的元素: > fx <- function(x) x>5;> Filter(fx,1:10) [1] 6 7 8 9 10 十四,计算累加 使用cumsum(x)来计算向量元素的累加值,累加的计算过程是迭代的:
例如,计算向量c(1:5)的累加值: > cumsum(1:5) [1] 1 3 6 10 15 十五,计数出现的次数(tabulate) tabulate()函数的作用是使用bin构造整数向量v,并计算bin中每个整数在v中出现的次数。 tabulate(bin, nbins = max(1, bin, na.rm = TRUE)) tabulate()函数构造的整数向量是v <- c(rep(0,nbins)),v向量的下标对应bin向量元素的值,因此,v向量可以表示的整数范围是1:nbins,bin向量中元素值超出该范围的值或者NA都被忽略。 tabulate()函数的作用是用v向量元素值表示bin元素的出现频次。 例如,tabulate()函数构造向量c(0,0,0,0,0),下标为2的元素值1,表示bin向量中元素2出现的频数是1,依次类推: > tabulate(bin = c(2,3,3,5)) [1] 0 1 2 0 1 十六,diff该函数计算向量相邻元素之间的差异,后者减去前者: d= c(10,1,1,1,1,1,1,2,1,1,1,1,1,1,1,3,10) diff(d)[1] -9 0 0 0 0 0 1 -1 0 0 0 0 0 0 2 7 参考文档 |
|