R语言教程写给高级入门者的数据打理攻略.docx
- 文档编号:2916007
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:21
- 大小:34.55KB
R语言教程写给高级入门者的数据打理攻略.docx
《R语言教程写给高级入门者的数据打理攻略.docx》由会员分享,可在线阅读,更多相关《R语言教程写给高级入门者的数据打理攻略.docx(21页珍藏版)》请在冰豆网上搜索。
R语言教程写给高级入门者的数据打理攻略
R语言教程:
写给高级入门者的数据打理攻略
2013-12-1809:
59核子可乐译51CTO 我要评论(0) 字号:
T | T
如果大家还未完全熟悉R语言、甚至不能轻松利用它实现最基本的处理任务,我建议各位先查阅其它指导文章、帮助自己积累对R语言的认识。
但如果大家已经拥有一定的背景知识,希望能够进一步提升自己的开发技能——或者单纯只是想看看R语言如何完成文章中罗列的四项任务——那么请跟着我继续阅读。
AD:
网+线下沙龙|移动APP模式创新:
给你一个做APP的理由>>
学习如何添加column、计算总和、对结果排序以及数据改造。
强大的能力在带来责任之外,也给我们增添了恼人的复杂性——这一点在R语言身上就表现得淋漓尽致。
作为专门针对统计计算工作的开源项目,R语言出色的调查、处理以及分析实力足以把数据驾驭得服服贴贴。
然而由于其语法有时候太过复杂,入门者们可能发现自己在掌握了基础知识之后很难进一步提升个人技能水平。
如果大家还未完全熟悉R语言、甚至不能轻松利用它实现最基本的处理任务,我建议各位先查阅其它指导文章、帮助自己积累对R语言的认识。
但如果大家已经拥有一定的背景知识,希望能够进一步提升自己的开发技能——或者单纯只是想看看R语言如何完成文章中罗列的四项任务——那么请跟着我继续阅读。
我创建了一套样本数据集,其中包含最近三年以来苹果、谷歌以及微软公司的营收与利润数额。
(统计数据来自这三家公司公布的财报结果,其中fy代表财年。
)如果大家想一步步跟随本文进行尝试,那么请将下列内容输入(或者直接复制加粘贴)到自己的R终端窗口当中:
1.fy <- c(2010,2011,2012,2010,2011,2012,2010,2011,2012)
2.company <- c("Apple","Apple","Apple","Google","Google","Google","Microsoft",
3."Microsoft","Microsoft")
4.revenue <- c(65225,108249,156508,29321,37905,50175,62484,69943,73723)
5.profit <- c(14013,25922,41733,8505,9737,10737,18760,23150,16978)
6.companiesData <- data.frame(fy, company, revenue, profit)
以上代码将创建出如下所示的数据框,所有变量都保存在“companiedsData”当中:
fy
company
revenue
profit
1
2010
Apple
65225
14013
2
2011
Apple
108249
25922
3
2012
Apple
156508
41733
4
2010
29321
8505
5
2011
37905
9737
6
2012
50175
10737
7
2010
Microsoft
62484
18760
8
2011
Microsoft
69943
23150
9
2012
Microsoft
73723
16978
(如果大家没有为各行命名,那么R会为其自动添加行数。
)
如果大家想在数据框中运行str()函数来查看其结构,则会看到其中的“year”被当作单独的数字来处理,而无法代表应有的“年”这一含义:
1.str(companiesData)
2.'data.frame':
9 obs. of 4 variables:
3.$ fy :
num 2010 2011 2012 2010 2011 ...
4.$ company:
Factor w/ 3 levels "Apple","Google",..:
1 1 1 2 2 2 3 3 3
5.$ revenue:
num 65225 108249 156508 29321 37905 ...
6.$ profit :
num 14013 25922 41733 8505 9737 ...
我可能希望把自己的数据按年度进行分组,但大家别误会——我并不打算针对时间进行特殊分析。
因此,我会将fy数列转化为一个包含有Rcategory(称之为factor)的column以取代日期,如以下命令所示:
1.companiesData$fy <- as.factor(companiesData$fy)
现在我们已经做好了各项准备工作。
向现有数据框中添加column
在R语言中,最简单的任务执行方式是向基于一个或多个column的数据框中添加新的column。
大家可能希望添加几项现有column以获取平均值或者根据各行现有数据计算出某项特定“result”。
在R语言中我们可以通过多种方式实现这一目标。
对于这样一项简单的任务,某些做法显得有些太过复杂——但请大家记住我的建议,对于那些需要处理更高难任务的高级用户来说,看似复杂的做法却往往能收到奇效。
语法一:
为新column简单创建一个变量名称,并将其添加到计算公式中作为赋值——举例来说,我们希望在新的column中计算两个现有column的总和:
1.dataFrame$newColumn <- dataFrame$oldColumn1 + dataFrame$oldColumn2
大家可能已经猜到了,这个新增colume名为“newColumn”,其数值为oldColumn1与oldColumn2各行数值的总和。
我们的这套示例数据框名为“data”,大家可以通过将利润除以营收再乘以100的方式添加一个“margin”(利润率)column:
1.companiesData$margin <- (companiesData$profit / companiesData$revenue) * 100
运行结果如下:
fy
company
revenue
profit
margin
1
2010
Apple
65225
14013
21.48409
2
2011
Apple
108248
25922
23.94664
3
2012
Apple
156508
41733
26.66509
4
2010
29321
8505
29.00651
5
2011
37905
9737
25.68790
6
2012
50175
10737
21.39910
7
2010
Microsoft
62484
18760
30.02369
8
2011
Microsoft
69943
23150
33.09838
9
2012
Microsoft
73723
16978
23.02945
哇哦——大家可以看到,margin列中数字的小数点后取值有点太夸张了。
我们可以利用round()函数让计算结果只保留小数点后一位;round()的格式为:
round(number(s)这里填写大家想要保留的小数点位数,数字会自动进行四舍五入)
此,我们打算为margin列中的数字保留小数点后一位:
1.companiesData$margin <- round(companiesData$margin, 1)
下面就是我们得到的最新结果:
fy
company
revenue
profit
margin
1
2010
Apple
65225
14013
21.5
2
2011
Apple
108248
25922
23.9
3
2012
Apple
156508
41733
26.7
4
2010
29321
8505
29.0
5
2011
37905
9737
25.7
6
2012
50175
10737
21.4
7
2010
Microsoft
62484
18760
30.0
8
2011
Microsoft
69943
23150
33.1
9
2012
Microsoft
73723
16978
23.0
语法二:
R语言的transform()函数是我们达成目标的另一条途径。
以下为transform()的基本语法:
1.dataFrame <- transform(dataFrame, newColumnName =所需公式)
因此,要利用transform()求得两column之和并将结果保存为新column,大家可以利用以下代码来实现:
1.dataFrame <- transform(dataFrame, newColumn = oldColumn1 + oldColumn2)
要利用transform()向我们的数据框中添加利润率column,大家需要这样操作:
1.companiesData <- transform(companiesData, margin = (profit/revenue) * 100)
接下来,我们可以利用round()函数将新column中的数值调整为只取小数点后一位。
或者,我们也可以采取一步到位的方法,直接创建一个仅保留小数点后一位的新column:
1.companiesData <- transform(companiesData, margin = round((profit/revenue) * 100, 1))
下面我们来总结round()函数的使用方法:
大家可以通过负数形式表达“小数点后的保留位数”。
举例来说,round(73842.421,1)保留的就是一位——结果为73842.4,而round(73842.421,-3)则代表取最接近的千位整数,也就是74000。
语法三:
R语言的apply()函数顾名思义,会将某个函数“应用”在数据框(或者多种其它R数据结构,但我们目前姑且只关注数据框这一种)当中。
它的语法与前两种函数相比要复杂一些,但在某些难度较高的计算过程中会起到重要作用。
apply()的基本格式为:
1.dataFrame$newColumn <- apply(dataFrame, 1, function(x) { . . . } )
以上代码行的作用是在数据框内创建一个名为“newColumn”的新column;其中的内容将由{…}的具体代码决定。
下面我们来分别解释以上代码行中各apply()参数的具体含义。
第一项apply()参数代表着现有数据框。
第二项参数,在本示例中为“1”,意思是“在row中应用一项函数”。
如果该参数为2,则代表“在column中应用一项函数”。
如果大家打算对当前column而非row进行求和或者求平均值,那么直接修改这条参数就能轻松达到目的。
第三项参数为function(x),很明显具体内容有待写入。
具体来说,在其它情况下function()部分将保持不变,但“x”则可以是任何变量名称。
那在我们的示例中,x代表着什么呢?
它的意思是将所有条目(row或者column)都将由apply()进行遍历。
最后,{…}代表我们要对遍历的每项条目进行何种操作。
请注意,apply()会对所有row或者column内的每一项条目进行查找发实现函数应用。
如果大家
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 教程 写给 高级 入门 数据 打理 攻略
![提示](https://static.bdocx.com/images/bang_tan.gif)