R语言教程写给高级入门者的数据打理攻略Word文档下载推荐.docx
《R语言教程写给高级入门者的数据打理攻略Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《R语言教程写给高级入门者的数据打理攻略Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
1.fy
<
-
c(2010,2011,2012,2010,2011,2012,2010,2011,2012)
2.company
c("
Apple"
"
Google"
Microsoft"
3."
)
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
108249
25922
3
2012
156508
41733
4
Google
29321
8505
5
37905
9737
6
50175
10737
7
Microsoft
62484
18760
8
69943
23150
9
73723
16978
(如果大家没有为各行命名,那么R会为其自动添加行数。
)
如果大家想在数据框中运行str()函数来查看其结构,则会看到其中的“year”被当作单独的数字来处理,而无法代表应有的“年”这一含义:
1.str(companiesData)
2.'
data.frame'
:
9
obs.
of
4
variables:
3.$
fy
num
2010
2011
2012
...
4.$
company:
Factor
w/
3
levels
"
..:
1
2
3
5.$
revenue:
65225
108249
156508
29321
37905
6.$
profit
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
运行结果如下:
margin
21.48409
108248
23.94664
26.66509
29.00651
25.68790
21.39910
30.02369
33.09838
23.02945
哇哦——大家可以看到,margin列中数字的小数点后取值有点太夸张了。
我们可以利用round()函数让计算结果只保留小数点后一位;
round()的格式为:
round(number(s)这里填写大家想要保留的小数点位数,数字会自动进行四舍五入)
此,我们打算为margin列中的数字保留小数点后一位:
round(companiesData$margin,
1)
下面就是我们得到的最新结果:
21.5
23.9
26.7
29.0
25.7
21.4
30.0
33.1
23.0
语法二:
R语言的transform()函数是我们达成目标的另一条途径。
以下为transform()的基本语法:
1.dataFrame
transform(dataFrame,
newColumnName
=所需公式)
因此,要利用transform()求得两column之和并将结果保存为新column,大家可以利用以下代码来实现:
newColumn
=
oldColumn1
oldColumn2)
要利用transform()向我们的数据框中添加利润率column,大家需要这样操作:
1.companiesData
transform(companiesData,
margin
(profit/revenue)
100)
接下来,我们可以利用round()函数将新column中的数值调整为只取小数点后一位。
或者,我们也可以采取一步到位的方法,直接创建一个仅保留小数点后一位的新column:
round((profit/revenue)
100,
1))
下面我们来总结round()函数的使用方法:
大家可以通过负数形式表达“小数点后的保留位数”。
举例来说,round(73842.421,1)保留的就是一位——结果为73842.4,而round(73842.421,-3)则代表取最接近的千位整数,也就是74000。
语法三:
R语言的apply()函数顾名思义,会将某个函数“应用”在数据框(或者多种其它R数据结构,但我们目前姑且只关注数据框这一种)当中。
它的语法与前两种函数相比要复杂一些,但在某些难度较高的计算过程中会起到重要作用。
apply()的基本格式为:
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内的每一项条目进行查找发实现函数应用。
如果大家