r语言的runmed函数_R实战 第五篇:常用函数的用法

本文介绍了R语言中的一些基础但实用的函数,如append用于向量合并,match进行向量匹配,%in%操作符判断元素是否在另一向量中,cut函数进行区间切割,rank对数据进行排名,replace替换向量元素,rep和replicate实现重复,rev反转向量,sort和order排序,unique和duplicated去重,which获取逻辑向量的索引,with和within构建环境,Reduce执行函数累积,Filter条件筛选,cumsum计算累加,以及tabulate统计频次。这些函数在数据处理和分析中起到关键作用。
摘要由CSDN通过智能技术生成

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

参数注释:

x:被匹配的向量

table:其他向量跟该向量进行匹配,x向量中的每一个元素都跟table向量中的每一个元素进行比较;

nomatch:不匹配时,函数返回的整数值。默认值是NA

incomparables :指定不能匹配的值的向量,在x向量中的任何值,如果是incomparables参数中的值,那么返回nomatch参数的值。由于历史原因,FALSE 和NULL相等。

match()函数返回的是一个整数向量,长度和参数x相同,每一个元素的值是x元素第一次匹配table元素的位置,如果x元素不在table向量中,那么相应位置上的元素值是nomatch(nomatch参数指定的值,默认值是NA)。

match: An integer vector giving the position in table of the first match if there is a match, otherwise nomatch.

If x[i] is found to equal table[j] then the value returned in the i-th position of the return value is j, for the smallest possible j. If no match is found, the value is nomatch.

1,match()函数的用法

match()函数的基本用法

x

tb

match(x,tb)

[1] 5 3 NA

match()函数可以用于批量修改数据框的列名:

names(df)[match(c('a',"b", "c)","d"),names(df))]

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:分割点,由两个或更多个唯一切割点构成的数字向量,或者单个数字(大于或等于2):

如果breaks是数字向量,那么向量中的每个分割点从小到大依次排列,cut()按照分割点把x划分为不同的分区;

如果breaks是单个数字,那么该数字表示cut()函数把x分割的段数。

labels:为分割的区间指定标签,labels中因子的个数和breaks中指定的分区数量保持一致。

ordered_result:默认值是FALSE,表示结果是无序的因子。

right:默认值是TRUE,表示分割点属于左侧分区。

示例,breaks是由分割点构成的数字向量,两个连续的分割点指定一个分区的边界点,

vc

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指定的第一个分区是:x>0 and x<=2

breaks指定的第二个分区是:x>2 and x<=5

breaks指定的第三个分区是:x>5 and x<=7

每一个分区按照其在breaks中的顺序依次对应lables参数中的一个因子。

四,排名函数

排名函数用于对向量元素进行排名,按照升序的顺序对数据进行排序:

rank(x, na.last =TRUE,

ties.method= c("average", "first", "last", "random", "max", "min"))

参数注释:

na.last :控制如何对待NA,如果设置为TRUE,那么缺失值排在最后一位;如果为FALSE,那么缺失值排在第一位;如果设置为NA,那么缺失值被移除;如果设置为keep,那么排名为NA。

ties.method :控制如何对待tie,一个tie是指值重复的元素。

例如,对向量进行排名,把排名的结果存储到变量中:

> r1 r1

[1] 2 1 3 4 5

五,替换

函数replace()用于把向量中指定位置的元素替换为指定的值(或向量):

replace(x, list, values)

参数注释:

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 df

x y1 6 5

2 3 1

3 7 7

4 5 3

>df[order(df$y),]

x y2 3 1

4 5 3

1 6 5

3 7 7

九,删除重复值

使用R去重有两种做法,第一种做法是把返回向量中的唯一值;第二个方法是返回向量中重复元素的位置,然后删除重复元素。

1,删除重复值

unique() 函数用于移除重复数据,用于向量,数据框或数组的去重:

unique(x, incomparables = FALSE)

参数 incomparables:用于指定不能比较的值构成的向量。FALSE是一个特殊的值,表示所有的值都可以比较。

2,检查重复值

duplicated()函数用于检查重复的元素,返回元素类型是逻辑值的向量或数据框:当元素的值为FALSE时,表示该元素不是重复值;当元素的值是TRUE时,表示该元素是前面(位置)的某一个元素的重复值。

duplicated(x, incomparables = FALSE, ...)

该函数的处理流程是:下标最小的元素是第一次出现的元素,标记为FALSE,当该元素值再次出现,表明该变量出现重复值,标记该元素为TRUE。

例如,以下代码用于删除数据框df中变量var的重复值:

df

十,逻辑TRUE的索引

which()函数,用于从逻辑向量中返回TRUE值在向量中的索引,参数x是一个由逻辑值构成的向量:

which(x)

例如,使用which()函数返回逻辑向量中TRUE值的索引:

> which(lv

[1] 1 3 7

> which(exper 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

lOzone

Month

cTemp

S.cT

rm(Day, Temp)

})

十二,Reduce函数

Reduce()函数对一个向量循环执行函数(该函数有两个参数),Reduce()函数的定义是:

Reduce(f, x, init, right = FALSE, accumulate = FALSE)

参数注释:

f :有两个参数的函数对象

x:向量

init :一个标量值,类型和x向量的元素相同;

right :逻辑值,当值为FALSE时,从向量的左侧开始,依次向右侧取出元素传递到给函数;当值为TRUE时,从向量的右侧开始,依次向左侧取出元素,传递给函数;

accumulate:逻辑值,a logical indicating whether the successive reduce combinations should be accumulated. By default, only the final combination is used.

例如,计算一个向量的累加和,首先,把初始值和向量的第一个元素1传递给sum()函数,计算出结果11,然后,把11和向量的第二个元素传递给函数sum(),计算出结果13,依次类推:

> Reduce(sum,1:5,10)

[1] 25

Reduce()函数内部执行的过程等价于:

a

b

c

d

sum(d,5)

十三,条件过滤器

按照条件从向量中选择元素,当条件为TRUE时,把该元素添加到结果向量中。参数 f 是一个返回逻辑值的函数(该函数必须有一个输入参数),参数x是一个向量:

Filter(f, x)

例如,从一个数值向量中,选择元素值大于5的元素:

> fx 5;> Filter(fx,1:10)

[1] 6 7 8 9 10

十四,计算累加

使用cumsum(x)来计算向量元素的累加值,累加的计算过程是迭代的:

step1:从第一个元素向右计算,把第一个元素的值作为第一次计算的结果;

step2:移动到下一个元素,把前一次计算的结果和当前元素求加和;

step3:重复步骤step2,直到移动到最后一个元素为止;

例如,计算向量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

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

参考文档:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值