前情回顾:
- 预告:“Steem 和 R 语言:跟大鹏学 R 语言”连载即将开始
- Steem 和 R 语言:跟大鹏学 R 语言(1)下载安装
- Steem 和 R 语言:跟大鹏学 R 语言(2)简单计算
- Steem 和 R 语言:跟大鹏学 R 语言(3)变量和向量
- Steem 和 R 语言:跟大鹏学 R 语言(4)作图和统计
- Steem 和 R 语言:跟大鹏学 R 语言(5)表白
- Steem 和 R 语言:跟大鹏学 R 语言(6)读取文件
- Steem 和 R 语言:跟大鹏学 R 语言(7)读取文件(续)
- Steem 和 R 语言:跟大鹏学 R 语言(8)懒人起手式
- Steem 和 R 语言:跟大鹏学 R 语言(9)选取单元格
- Steem 和 R 语言:跟大鹏学 R 语言(10)行和列
本文选自《学 R:零基础学习 R 语言》(研究出版社,大鹏、李怡著,2018)第二章,有改动。
下面,我们对整行求平均值,并且把结果作为一列添加到mydata2中,列名称叫做mean:
mydata2$mean <- rowMeans(mydata2[, 2:13])
如果不是求和或求平均值,而是求其他函数值,比如中位数、最大值、最小值呢?难道也是在原函数名前边添个row或者col就行了吗?呃,理论上当然是可以做到的(见第[9](file:///D:/Dropbox/Archive/xuer/r4r_bd/_book/secfunction.html#secfunction)章),但实际上没那个必要,因为那样就需要太多的新函数。我们可以用功能更强大的apply()
函数:
mydata2$median <- apply(X = mydata2[, 2:13],
FUN = median, MARGIN = 1)
这条代码,表示计算对象是mydata2[, 2:13]这个数据框,按行操作(MARGIN = 1
),操作的函数是求中位数median
。如果把median
换成sum
或mean
,那么就跟rowSums()
和rowMeans()
的效果完全一样了。想了解apply()
函数更多详细情况,请咨询F1小助理。
现在,我们可以用上一章认识的各种数学函数,对这个表格进行随便折腾了。
任意相邻年份某个月的二氧化碳浓度增量,也就是相邻两行的差,可以用diff()
函数:
diff(mydata2$Sep)
练习 2.2 请解释下面代码的含义,猜猜计算出来的结果是什么,再运行,看看跟你猜的是否一致。
apply(X = mydata2, FUN = diff, MARGIN = 2)
上面我们演示了如何让R读取一个数据文件,并简单分析和作图。从此以后,你就可以依葫芦画瓢来处理真正属于你自己的数据了!
回过头来看,我们上面处理的是表格数据。如果要处理其他格式的数据文件,尽管用我们前面介绍的鼠标选定拷贝到剪贴板的方法也可以达到目的,但是我们仍然建议你用Excel或别的软件将它保存或导出为.csv格式,方便R读取和进一步处理,这是首选方案。并且,我们建议你以后把所有数据都尽量从一开始就保存为 .csv格式,因为它就像全世界语言里的英语,到哪里都通用,几乎任何软件都能打开。如果这仍然满足不了你的需求,那么
请F1小助理搬出
read.table()
和scan()
函数的帮助文件;请阅读《R数据的导入和导出》这本书,来自开源社区,网上免费获取;
如果经常处理Excel的xls或xlsx文件,请使用R相关的扩展包。这个方法我们会在第9章介绍。
R说明文档的水平已经远高于开源软件的平均水平了,甚至高过商业软件(特别是SPSS,老是摆出一张臭脸,说“如果你不懂输出的东西是什么含义,那么点击帮助按钮,我们会弹出5行你仍然不会弄懂的火星语。”)
— Peter Dalgaard, April 2002