网易首页 > 网易号 > 正文 申请入驻

R语言学习笔记(三)——实用的内置函数

0
分享至

导语:前两期小编给大家介绍了R语言和Rstudio的安装(),以及一个非常有用的R包dplyr(R语言学习笔记(二))。此外,作为R语言的初学者也应该掌握一些基本函数,所以本期给大家介绍一些R中非常实用的内置函数,希望对大家有所帮助。

01内置数据集

R语言中有很多内置的数据集,这些数据集存储在datasets这个包中,包含了R中所有的数据类型。R会默认已经加载了这个包。我们可以用data()命令查看R中所有内置的数据集,左边是数据集的名称,右边是数据集的描述。

> data()Data sets in package ‘datasets’:AirPassengers Monthly Airline Passenger Numbers 1949-1960BJsales Sales Data with Leading IndicatorBJsales.lead (BJsales)Sales Data with Leading IndicatorBOD Biochemical Oxygen Demand

这里介绍几个十分常用的数据集,mtcars收集了美国32种汽车的11个指标,经常用于ggplot2作图的示例数据;iris是一个非常有名的数据集,收集了3种鸢尾花花瓣和花萼的长宽信息,是数据挖掘中常用的示例文件;state.x77收集了美国50个州的基本信息,是画热图的示例文件。

02内置函数

R中有很多实用的内置函数,这里不做系统的介绍,仅列举一些在数据分析中非常实用的函数。

(1)关于NA

对于一组数据来说,如果出现了缺失值,在R中是不能直接进行统计分析的,好在R中有专门针对缺失值的几个函数,下面举例说明。

> x <- c(1, 2, 3, 4, 4, NA)> mean(x)[1] NA

向量x中有NA值,看到直接对向量x求平均值结果是不对的,有两种方法可以解决。

> mean(x, na.rm = T)[1] 2.8> mean(na.omit(x))[1] 2.8

第一种是在mean函数中添加na.rm = T参数,也就是计算时先将NA值移除;第二种是先用na.omit()函数移除掉x中的NA值,再计算平均值。

(2)两个向量的关系

数据分析中经常需要找不同组之间的关系,这里有几个常用的函数。

交集(intersect)

> x1 <- c(1:5)> x2 <- c(3:7)> intersect(x1, x2)[1] 3 4 5

并集(union)

> union(x1, x2)[1] 1 2 3 4 5 6 7

匹配(match):返回向量1的元素在向量2中的位置

> match(x1, x2)[1] NA NA 1 2 3

表示x1的5个元素在x2中的位置分别为NA、NA、1、2、3。这个函数的意义在于生成一个索引向量,在数据框的筛选中会非常实用。

(3)基本统计函数

关于基本的统计函数如平均值、标准差等这里不做系统介绍,这里说几个统计函数的特殊用法。

(a)生成随机数

通常用runif(n, min, max)函数,这个函数生成均匀分布的值,n为个数,min和max分别是最小值和最大值,默认参数为0和1。

> runif(5, 1, 10)[1] 7.236265 7.278368 2.847278 9.544132 6.884813> runif(5)[1] 0.6437805 0.2144422 0.4272817 0.6258470 0.6981409

(b)生成随机整数

一个最简单的办法是round()和runif()函数连用,其中round()是按照四舍五入取整函数。如果要向上或者向下取整,可以使用ceiling()和floor()函数。

> round(0.5)[1] 0> round(1.2)[1] 1> round(runif(10)) #生成随机的0,1向量[1] 0 0 0 1 1 1 1 1 0 0> round(runif(10, 0, 2)) #生成随机的0,1,2向量[1] 0 1 0 1 2 0 2 0 2 1> ceiling(runif(10, -2, 1)) #生成随机的-1,0,1向量[1] 0 -1 1 -1 0 -1 0 -1 1 0> floor(runif(10, -1, 2))[1] 1 0 1 1 -1 1 -1 -1 1 -1

后面几种生成随机向量的方式非常实用,原理就是先用runif()函数生成随机数,然后再用round()函数取整数。基因型数据经常用0,1,2或者-1,0,1表示,我们可以用这种方式模拟基因型数据。

(c)正态分布

用的最多的是rnorm(n, mean, sd)函数,生成n个符合某个正态分布的随机数。用法比较简单,默认的平均值是0,方差是1。

> rnorm(5)[1] -1.7916223 1.7582387 0.2924384 0.3130404 -0.5076251> rnorm(5, 3, 1)[1] 1.968562 4.885262 4.634220 3.017137 3.990052

(4) 其他函数

R中还有不少常用的函数,这里仅列举三个。

(a)summary函数

这个函数是一个比较“万金油”的函数,可以单独对向量或者矩阵使用,会给出一些基本的统计量,包括极值、中位数、平均数等等。

> summary(1:10) Min. 1st Qu. Median Mean 3rd Qu. Max.1.00 3.25 5.50 5.50 7.75 10.00> summary(matrix(10:15, nrow = 2)) V1 V2 V3Min. :10.00 Min. :12.00 Min. :14.001st Qu.:10.25 1st Qu.:12.25 1st Qu.:14.25Median :10.50 Median :12.50 Median :14.50Mean :10.50 Mean :12.50 Mean :14.503rd Qu.:10.75 3rd Qu.:12.75 3rd Qu.:14.75Max. :11.00 Max. :13.00 Max. :15.00

在一些统计分析中也经常使用summary()函数,比如下面的线性回归:

> x <- c(2, 2, 3, 4, 4)> y <- c(10, 20, 30, 40, 50)> fm <- lm(y ~ x)> summary((fm))

Call:

lm(formula = y ~ x)

Residuals:

1 2 3 4 5 -5.000e+00 5.000e+00 -1.776e-15 -5.000e+00 5.000e+00 Coefficients:Estimate Std. Error t value Pr(>|t|) (Intercept) -15.000 9.037 -1.660 0.1955 x 15.000 2.887 5.196 0.0138 *---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 5.774 on 3 degrees of freedomMultiple R-squared: 0.9, Adjusted R-squared: 0.8667 F-statistic: 27 on 1 and 3 DF, p-value: 0.01385

可以看到summary()函数给出了很多统计量,包括残差、截距、显著性等等。

(b)table函数

这个函数看起来不起眼,但很实用,给出一个频率分布表,还是举例说明。

> a <- c(rep(NA, 3), rep(1:3, 2))> a[1] NA NA NA 1 2 3 1 2 3> table(a)a1 2 3 2 2 2

上面给出了向量a的频率分布,但没有包含NA,如果要统计NA的数目,则需要添加参数exclude = NULL。

> table(a, exclude = NULL)a1 2 32 2 2 3

需要注意的是生成的频率分布也是一张表,如果需要对这个表进行操作,最好转化成数据框。

> x <- table(a, exclude = NULL)> class(x)[1] "table"> x <- as.data.frame(x) #将x转换成数据框> class(x)[1] "data.frame"

(c)apply/sapply/tapply/mapply

这是一个函数家族,其实就是为了代替for循环,简化代码,这里只介绍apply和tapply。

apply(x, margin, fun, ...)有3个主要的参数,x通常为数据框,margin参数为1或2, 1表示按行,2表示按列,fun为调用函数。比如按列统计mtcars数据集的平均数。

> apply(mtcars, 2, mean)mpg cyl disp hp drat wt qsec20.090625 6.187500 230.721875 146.687500 3.596563 3.217250 17.848750vs am gear carb0.437500 0.406250 3.687500 2.812500

tapply(x, index, fun, ...)通过index对数据集x进行分组运算,相当于上一期dplyr包中的group_by操作。如我们需要统计iris数据集中不同品种鸢尾花的平均花萼长度。

> head(iris)Sepal.Length Sepal.Width Petal.Length Petal.Width Species1 5.1 3.5 1.4 0.2 setosa2 4.9 3.0 1.4 0.2 setosa3 4.7 3.2 1.3 0.2 setosa4 4.6 3.1 1.5 0.2 setosa5 5.0 3.6 1.4 0.2 setosa6 5.4 3.9 1.7 0.4 setosa> tapply(iris$Sepal.Length, iris$Species, mean)setosa versicolor virginica5.006 5.936 6.588

如果用dplyr则是:

> iris %>% group_by(Species) %>% summarise(mean = mean(Sepal.Length))

3 自编函数

R中虽然有很多内置函数,但具体分析时有时候需要用户自己编写函数。自编函数中有两个非常重要的思想,循环和递归。关于循环相信接触R的人都十分了解,这里只列举两个递归函数的例子。

(1)斐波那契数列

斐波那契数列本身就是用递归定义的F(n) = F(n-1) + F(n-2),因此非常适合用递归函数实现。

> fib <- function(n){ #定义函数if(n==1 | n==2){ return(1)} else{ return(fib(n-1)+fib(n-2))}> fib(7) #函数调用 [1] 13

(2)求最大公约数

gcd <- function(a,b) { if (b == 0) return(a) else return(gcd(b, a %% b))> gcd(15, 12)[1] 3

可见,递归是一种比较高级的编程思想,灵活运用能够极大的化繁为简。

结语:以上就是小编认为R中比较实用的一些内置函数,能力有限总结的肯定不够完全,欢迎大家和小编一起交流R语言学习心得。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
证监会暂停转融券!2月19日,今日凌晨的四大利好全面发酵!

证监会暂停转融券!2月19日,今日凌晨的四大利好全面发酵!

潮起潮落wsy
2025-02-19 00:52:32
妹妹结婚我随礼5万,出酒店门时接到妹夫电话,我返回去砸了婚礼

妹妹结婚我随礼5万,出酒店门时接到妹夫电话,我返回去砸了婚礼

广西秦胖胖
2025-02-17 15:37:54
再见皇马!新卡卡翻脸离队!顶撞安帅枯坐板凳,转投米兰冲金球奖

再见皇马!新卡卡翻脸离队!顶撞安帅枯坐板凳,转投米兰冲金球奖

阿泰希特
2025-02-19 00:05:03
惊悚!“80后死亡率远超70后”“每20个80后就有1人去世”?高校教授驳斥→

惊悚!“80后死亡率远超70后”“每20个80后就有1人去世”?高校教授驳斥→

上观新闻
2025-02-18 10:14:00
因阮经天患抑郁,下海复出无人识,今录制《演员请就位3》遭抵制

因阮经天患抑郁,下海复出无人识,今录制《演员请就位3》遭抵制

史行途
2025-02-18 11:21:19
网红顾茜茜自称日入30万惹争议 本人回应:税前收入,有退货还要给团队发工资

网红顾茜茜自称日入30万惹争议 本人回应:税前收入,有退货还要给团队发工资

红星新闻
2025-02-18 20:31:17
撕标签之战!龙芯3B6600凭什么让i5、i7瑟瑟发抖?

撕标签之战!龙芯3B6600凭什么让i5、i7瑟瑟发抖?

小兔子发现大事情
2025-02-19 04:14:41
2-5惨败!亚冠三冠王狂输5场耻辱出局,中超BIG3争夺最后2个名额

2-5惨败!亚冠三冠王狂输5场耻辱出局,中超BIG3争夺最后2个名额

环太平洋老正太
2025-02-18 22:13:58
收手吧“资本家的丑孩子”,没演技就回家多练,不要出来祸害观众

收手吧“资本家的丑孩子”,没演技就回家多练,不要出来祸害观众

叹知
2025-02-15 18:46:08
“李亚鹏睡过的,哪一个不是天后!”

“李亚鹏睡过的,哪一个不是天后!”

姜糖先生
2025-02-17 18:28:24
俄罗斯缺席慕尼黑,中国成为被群攻对象,王毅:别拿着鸡毛当令箭

俄罗斯缺席慕尼黑,中国成为被群攻对象,王毅:别拿着鸡毛当令箭

国际阿尝
2025-02-18 10:14:18
中国是否考虑向乌克兰派遣维和部队?外交部回应

中国是否考虑向乌克兰派遣维和部队?外交部回应

澎湃新闻
2025-02-18 15:50:26
新疆定了!标准上调!

新疆定了!标准上调!

hi巴州
2025-02-18 20:02:01
马科斯没想到,中方看穿他的计划,在南海换了打法,让菲知难而退

马科斯没想到,中方看穿他的计划,在南海换了打法,让菲知难而退

Ck的蜜糖
2025-02-19 04:26:45
妻子出轨20年,丈夫居然不离婚,60岁大爷:不离婚,把她当保姆

妻子出轨20年,丈夫居然不离婚,60岁大爷:不离婚,把她当保姆

惟来
2025-02-17 16:21:01
亚洲杯最惨球队诞生!3场狂丢14球,球迷:去年怎么赢的中国队?

亚洲杯最惨球队诞生!3场狂丢14球,球迷:去年怎么赢的中国队?

绿茵舞着
2025-02-18 23:47:34
女排联赛第24轮综述:天津队2连败+辽宁3连胜,江苏守住第二

女排联赛第24轮综述:天津队2连败+辽宁3连胜,江苏守住第二

烧体坛
2025-02-18 22:29:41
曾是全国最年轻正厅,刘俊义当选大同市市长

曾是全国最年轻正厅,刘俊义当选大同市市长

观察者网
2025-02-18 22:48:07
中国有色金属工业协会对美国政府宣布调整铝进口关税的错误做法强烈不满、坚决反对

中国有色金属工业协会对美国政府宣布调整铝进口关税的错误做法强烈不满、坚决反对

财联社
2025-02-18 15:10:06
科技公司CEO怒批《哪吒2》:毒鸡汤烂片,共鸣的都是叫不醒的人

科技公司CEO怒批《哪吒2》:毒鸡汤烂片,共鸣的都是叫不醒的人

梦史
2025-02-17 14:33:35
2025-02-19 06:08:49
宁博士
宁博士
博士,跑者,三娃爸,创业者
310文章数 1204关注度
往期回顾 全部

科技要闻

马斯克发布"最聪明AI":号称碾压DeepSeekV3

头条要闻

10元1个螺母被认定为枪支散件 父子被刑拘获分案调查

头条要闻

10元1个螺母被认定为枪支散件 父子被刑拘获分案调查

体育要闻

曾遭遇两年欠薪,国足最新归化球员是他?

娱乐要闻

陈晓与陈妍希宣布离婚:今后各自安好

财经要闻

存款准备金率5%隐形下限能否突破?

汽车要闻

两种电池可选 小米YU7最大续航820km

态度原创

艺术
亲子
健康
本地
公开课

艺术要闻

故宫珍藏的墨迹《十七帖》,比拓本更精良,这才是地道的魏晋写法

亲子要闻

娃睡不踏实、老哼唧?这个原因家长很容易忽略(不是冷

抑郁症患者称好的“乌托邦”宝地

本地新闻

非遗版春节|新春青岛行,是谁闯入了动漫世界?

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版