R语言基础教程 | 数据结构—因子

Python010

R语言基础教程 | 数据结构—因子,第1张

变量可归结为名义型、有序型或连续型变量。名义型变量是没有顺序之分的类别变量。类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)。因子在R中非常重要,因为它决定了数据的分析方式以及如何进行视觉呈现。因子(factor)是R语言中比较特殊的一个数据类型, 它是一个用于存储 的类型,举个例子,从性别上,可以把人分为:男人和女人,从年龄上划分,又可以把人分为:未成年人(<18岁),成年人(>=18)。

R把表示分类的数据称为因子,因子的行为有时像字符串,有时像整数。因子是一个向量,通常情况下,每个元素都是字符类型,也有其他数据类型的元素。因子具有因子水平(Levels),用于限制因子的元素的取值范围,R强制:因子水平是字符类型,因子的元素只能从因子水平中取值,这意味着,因子的每个元素要么是因子水平中的字符(或转换为其他数据类型),要么是缺失值,这是因子的约束,是语法上的规则。

通常情况下,在创建数据框变量时,R隐式把数据类型为字符的列创建为因子,这是因为R会把文本类型默认为类别数据,并自动转换为因子。前面我们在讲数据框时,就有提到。

通过class()函数检查gender列的类,结果是因子类型,而不是字符向量。

可以通过factor()函数创建因子,factor()函数的第一个参数必须是字符向量,通过levels参数显式设置因子水平

参数注释:

例如,因子sex的值是向量c('f','m','f','f','m'),因子水平是c('f','m')

因子水平规定了 因子取值的范围 ,每一个因子,都包含因子水平的信息,例如,打印gender列,可以看到因子的元素和水平:

该因子中的每个值都是一个字符串,它们被限制为“f”、“m”和缺失值(NA)。如果把其他字符串添加到gender列中,R会抛出警告消息,并把错误赋值的元素设置为NA,例如:

因子水平,可以通过函数levels(factor)来查看:

水平的级数,相当于level的长度,可以由nlevels函数查询到:

使用factor函数创建因子,可以使用labels参数为每个因子水平添加标签,labels参数的字符顺序,要和levels参数的字符顺序保持一致,例如:

通常情况下,因子一般是无序的,这可以通过is.ordered()函数来验证:

因子的顺序,实际上是指因子水平的顺序,有序因子的因子水平是有序的。在特殊情况下,有些因子的水平在语义上大于或小于其他水平,R支持按顺序排列的因子,使用ordered函数,或通过给factor函数传入order=TRUE参数,把无序因子转换为有序的因子。

ordered()函数不能指定特定因子水平的顺序,通常情况下,因子中先出现的水平小于后出现的水平。例如,通过ordered函数把sex因子转换为有序的因子:

通过factor函数创建有序因子,通过levels指定因子的顺序。

因子的顺序,其实是因子水平的顺序,我们可以通过levels,使现有的因子按照指定的因子水平来排序。

例如,把heights数据框的gender,按照指定的levels,转换成有序因子:

在数据清理时,可能需要去掉与因子水平对应的数据,通常情况下,需要删除未使用的因子水平,可以使用droplevels函数,它接受因子或是数据框作为参数。

如果x是数据框,那么把数据框中未使用的因子删除。

在数据清理中,有时需要把因子转换为字符,通常情况下,使用as.character()函数,把因子转换为字符串:

使用as.numeric()或as.integer()函数可以把因子转换成对应的整数.

函数 cut() 能够把数值变量切成不同的块,然后返回一个因子.

参数注释:

例如,把身高数据,按照指定的切割点向量分割:

当需要把因子转换为有序因子时,要注意因子水平的顺序.

解答: 1、∑符号表示求和,∑读音为sigma,英文意思为Sum,Summation,就是和。 用∑表示求和的方法叫做Singa Notation,或∑ Notation。 它的小写是σ,在物理上经常用来表示面密度。 (相应地,ρ表示体密度,η表示线密度) 2、∑的用法: n ∑ k i表示

级数,符号\意思

解答: 1、∑符号表示求和,∑读音为sigma,英文意思为Sum,Summation,就是和。 用∑表示求和的方法叫做Singa Notation,或∑ Notation。 它的小写是σ,在物理上经常用来表示面密度。 (相应地,ρ表示体密度,η表示线密度) 2、∑的用法: n ∑ k i表示

首先你要学会严谨地叙述问题,只有把问题讲清楚了才能解决。

如果f(x)在x0的某领域内具有n+1阶的导数,那么f(x)在这个邻域内只能保证n+1阶Taylor展开,并不能进一步让n->oo,也就谈不上Taylor级数。

正确的叙述是:如果f(x)在x0的某个领域内无限可微,并且对此邻域内的任何x,以x0为中心的Taylor展开式的余项在n->oo时都趋于0,那么在此邻域内f(x)和它的Taylor级数相等。

关于疑问1,可以这样讲

如果f(x)在x0的某个邻域内可以(以x0为中心)展开成Taylor级数(也就是f(x)和它的Taylor级数相等的意思),那么在该邻域内任取一点y0,是否存在y0的邻域使得f(x)在此范围内可以(以y0为中心)展开成Taylor级数?

结论是肯定的。仅用实函数比较麻烦(需要用二项式定理展开,再用绝对收敛级数的交换律),从复分析的角度看比较显然(当然逻辑上讲用到了相对高级的结论),如果f(x)在x0的邻域O(x0,R)内可以展开成Taylor级数,那么利用幂级数的性质知道该级数的收敛半径至少是R,并且在此邻域内f(x)是全纯函数,取r=R-|y0-x0|,那么y0的邻域O(y0,r)包含于O(x0,R),f(x)在O(y0,r)内是解析函数,当然可以以y0为中心做Taylor展开。所以三楼的回答是有问题的。

关于疑问2,如果f(x)以x0为中心做Taylor展开,收敛半径为R,那么当|x-x0|<R的时候Taylor级数肯定是绝对收敛的,不会出现不收敛的情况。至于|x-x0|=R的时候幂级数是否收敛就要看情况了,不过如果在收敛圆周上某点y0收敛的话由Abel第二定理可以知道其值就是f(y0)。

二楼关于收敛半径的观念是有一定问题的,虽然收敛半径是幂级数固有的性质,但是和f(x)本身也是有很大联系的,不能认为这两者无关。

三楼的例子虽然不满足你的疑问中的条件(因为那个例子收敛半径是0,并且在x=0处确实是收敛的),但是这个例子仍然需要掌握。