1.165除以2保留三位小数是多少?(用四舍六入五成双)


天才符箓师,重生为七岁小女娃!稚嫩的外表,狠辣的手段。荒郊野外,她痛殴仇敌被太子撞见,她表情漠然,太子却一见倾心!“太子殿下不好了,太子妃大人一张定身符,把皇帝陛下定在大殿里吃土了。”“这不很正常么?谁让狗皇帝招惹我妻?定的好!再给他泼盆冰

《》所有内容均来自互联网或网友上传,本站基于搜索引擎爬虫技术对该小说进行检索,不保存、转储任何文章内容。只为原作者的小说进行宣传。欢迎各位书友支持梓云溪并收藏《》最新章节。

从一个数据处理难题来引入数值和字符处理函数的讨论问题,如下图。

一组学生参加考试,考试科目分别为:数学、科学和英语。现在需要给学生确定单一的成绩衡量标准,首先将三门科目的成绩组合起来并排序,然后将前20%的学生评定为A,接下来20%的学生评定为B,依次类推。最后,将所有学生按照字母顺序进行排序并输出。

  • 从上图中可以看出,数学、科学、英语三科的均值和标准差均相去甚远,求平均值没有意义。因此,将三门学科成绩组合之前,必须将三科成绩进行转换,变为可比较的
  • 将三门学科成绩组合之后,确定统一的标准评定学生排名。
  • 姓名的字段只有一个,按照姓名排序将变得复杂,因此需要将姓和名分开。

R语言中数据处理最重要的函数:数值(数学、统计、概率)函数字符处理函数。

#向0的方向截取x的整数部分 #将x舍入为指定位的小数 #将x舍入为指定的有效数字位数 #对x取以n为底的对数 #对x取以e为底的对数 #对x取以10为底的对数

数值(数学、统计、概率)函数用在向量、矩阵、数据框时,单独用于其中每一个独立的值

#求分位数,其中x为待求分位数的数值型向量,probs为一个由[0,1]之间的概率值组成的数值向量 #为数据对象x按列进行中心化或标准化

许多统计函数都拥有可以影响输出结果的可选参数,比如下面这行代码:

#trim为截尾平均数,下面的代码表示去除最大5%和最小5%的数据(即异常值)和所有缺失值后的算术平均数

计算某一数值向量的均值和标准差,有两种不同的方法,详见以下代码:

#计数,用length函数获得向量x的长度,即其中元素的个数 #用sum函数求和,除以元素个数,得到均值 #除以n-1(注意!)后开算术平方,即标准差

R语言中的函数sd()除以的是向量长度(元素数)n减去1,即n-1

以下代码对矩阵或数据框的数值列进行均值为1、标准差为0的标准化:

或者任意均值和标准差:


如果仅对指定列处理,则使用:

与统计函数类似,但通常用来生成特征已知的模拟数据,以及在用户编写的统计函数中计算概率值。常见的概率函数如下:

R语言中所有的概率函数均对应四个具体函数:d(密度函数)、p(分布函数)、q(分位数函数)和r(生成随机数)
r: 生成随机数 #随机偏差

以上图中的正态分布(norm)为例,如果不指定均值和标准差,将生成标准正态分布(即均值为0,标准差为1),相应的密度函数(dnorm)、分布函数(pnorm)、分位数函数(qnorm)和随机生成函数(rnorm)分别如下:

#利用函数plot绘图

*注:函数pretty(x, N)的含义是对变量x进行美观分割,主要是将连续变量 x 分割为 N 个区间(N+1 个端点),并使端点为取整值,常常在绘图中使用。后面将提到。

#位于z=1.96左侧的标准正态曲线下方面积?分布函数p
#均值为500,标准差为100正态分布的0.9分位点的值?分位数函数q
#生成50个均值为50,标准差为10的正态随机数?随机生成函数r

每次生成伪随机数时,函数都会使用一个不同的种子,因此会产生不同的结果。但实际中常常需要让随机结果重现(reproducible),为了实现结果重现可以通过函数set.seed()指定种子。

随机结果重现创建一些固定的随机示例数据,其目的主要是便于之后随时取用并与他人共享

以下用均匀分布函数unif()生成在0-1区间服从均匀分布的伪随机数来举例:

函数set.seed()后的数字可以自己随意设置,随机数种子相当于锚定。

MASS包中的函数mvrnorm()可以生成给定均值向量协方差矩阵的多元正态分布,调用格式为:

#其中n是样本大小,mean为均值向量,而sigma是方差-协方差矩阵(或相关矩阵)

假设从如下所示的三元正态分布中抽取500个观测

#生成500个随机观测数据 #确认数据框有500个观测,3个变量

数学函数、统计函数和概率函数用于处理数值型数据,而利用字符处理函数可以从文本型数据中抽取信息。

#在x中搜索某种模式,fixed=FALSE则pattern为一个正则表达式,否则pattern为一个文本字符串,返回值为匹配的下标 #在split处分隔字符向量x中的元素;fixed=FALSE则pattern为一个正则表达式,否则pattern为一个文本字符串

*注:函数grep()、函数sub()和函数strsplit()能够搜索某个文本字符串(fixed=TRUE)或某个正则表达式(fixed=FALSE, 默认值为FALSE)。正则表达式为文本模式的匹配提供了一套清晰而简练的语法。例如:

可匹配任意以0个或1个h或c开头、后接at的字符串。因此,此表达式可以匹配hat、cat和at,但 不会匹配bat。

更多关于正则表达式的内容,可以参考维基百科(、)。


#将连续型变量x分割为n个水平的因子 #通过选取n+1个等间距的取整值,将一个连续型变量分割为n个区间,绘图中常用

关于函数cut()更多内容,详见

还有一个重要的实用函数,函数cat(),详细情况如下:

#该函数是一个输出函数 #函数cat()可以将很多参数连接起来输出,但每两个连接起来的参数之间都自动加上空格 #file表示可以存储到一个文件中,后面的append为FALSE表示覆盖,为TRUE表示添加 #sep是一个字符向量,跟在连接元素的后面 #fill控制是否打印空行,如果为FALSE,则碰到'\n'才会打印,若为TRUE,则根据默认宽度换行#labels当fill为TRUE时才有意义,是打印出的行的名称

*注1:例子中用到了多种转义字符:\b表示键盘中Backspace的功能——退格,\n表示键盘中回车的功能——另起一行,\t表示键盘中Tab的功能——制表符,\'表示单引号

*注2:第二行缩进了一个空格。当 函数cat() 输出连接后的对象时,会将每一个对象都用空格分开,这就是在句号之前使用退格转义字符\b的原因。否则代码运行的结果将变为

句号前面多了一个空格。同样的,如果要删除第二行的缩进应在"isn\'t R"之前增加退格转义字符\b。 六、将函数应用于矩阵和数据框

在R中,函数可以应用到一系列数据对象上,包括标量、向量、矩阵、数组和数据框。举例如下:

#均匀分布随机函数runif生成3行4列包含12个元素的矩阵c #求矩阵c中每个元素以e为底的对数 #求矩阵c中全部12个元素的均值

最后一行代码中使用函数mean()得到的是矩阵c中全部12个元素的均值。

如果希望求的是各行的均值或各列的均值应该怎么办呢?

利用函数apply()可以将其他函数应用于矩阵的各行或者各列

其中,x 为数据对象,MARGIN是维度的下标,FUN是应用于x的各类R语言函数(甚至包括自己定义的函数),而...是指任何想改变FUN的参数。如果x是矩阵或数据框, 那么MARGIN=1表示矩阵或数据框的行,MARGIN=2表示矩阵或数据框的列

#随机正态分布函数rnorm生成6行5列包含30个元素的矩阵
#计算矩阵mydata每一行的均值,MARGIN=1表示矩阵或数据框的行
#计算矩阵mydata每一列的均值,MARGIN=1表示矩阵或数据框的列
#参数trim=0.2表示去除最大20%和最小20%的异常值,即截尾均值仅选择了中间60%的数据
 

函数apply()可把函数应用到数组的某个维度上,而函数lapply()函数sapply() 则可将函数应用到列表(list)上,后续的内容应该会经常遇到。

由函数apply()衍生出了一系列函数,被称为函数apply()家族,更多详细信息在中查看。另外,在中可以查看函数apply()家族中函数tapply()详细的实际案例。

数据处理难题的一套解决方案

现在看一下开头提出的问题:将学生的各科考试成绩组合为单一的成绩衡量指标进行排名、基于相对名次(以20%为区间标准)给出分段评分、根据学生姓氏和名字的首字母排序。以下代码提供了一套解决方案:

运行代码后,查看roster,可得到如下结果

以上代码的分步骤解读:

一、利用函数options()设置为小数点后保留两位小数,使输出更易阅读。

二、输入原始数据,并构建数据框

#建立数学、科学、英语成绩列向量

三、由于数学、科学和英语成绩的均值和标准差相差实在太大,在组合之前需要将三者变得可比较——将三者的列向量标准化,用单位标准差来表示


#利用函数scale()对数据框中的数学、科学、英文成绩列向量(第2列到第4列)进行均值为1、标准差为0的标准化

四、利用函数apply()函数mean()应用到数据框z计算每一行的均值,获得三门学科的综合得分,并用函数cbind()将综合得分添加到数据框roster中

#计算数据框z中每一行的均值,建立列向量score

五、利用函数quantile()可以得到综合得分score的分位数(是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数——即二分位数、四分位数、百分位数等)

#按照0.2或20%作为分界点

六、通过逻辑运算符,将综合得分的分位数变量重新转换为包括五种成绩等级的变量,并且将该变量直接并入数据框roster

#大于等于前80%分数记为A等,并且赋值给数据框roster中的新变量grade(下同)。
#小于前80%、大于等于前60%分数记为B等
#小于前60%、大于等于前40%分数记为C等
#小于前40%、大于等于前20%分数记为D等
#小于前20%的分数记为E等
 

七、利用函数strsplit()空格为拆分点把学生姓名拆分为两个向量——名(Firstname)和姓(Lastname),注意利用函数strsplit()拆分后得到的字符串向量将返回为一个列表(list)

#默认为fixed=FALSE,即正则表达式匹配,因此建议需要用字符串拆分时务必设置fixed选项为TRUE,避免引起不必要的麻烦。

八、然而我们仅仅需要的是列表(list)中的向量,因此接下来马上要做的就是去列表化,将列表转化为名(Firstname)和姓(Lastname)两个向量

利用函数sapply()可以分别提取列表中每个成分的第一个元素和第二个元素并储存,用同时应用是函数“[”,该函数可以提取某个对象的一部分——可以用来提取列表 name 各成分中的第一个或第二个元素。

至此,开头的难题被顺利解决。

我要回帖

更多关于 3.4÷0.56保留两位小数 的文章

 

随机推荐