R语言中的几种数据结构

Python09

R语言中的几种数据结构,第1张

R语言中的几种数据结构

一 R中对象的5种基本类型

字符(character)

整数 (integer)

复数(complex)

逻辑(logical:True/False)

数值(numeric:real numbers)

查看对象类型的命令:class(x)

二 R语言中有如下几种数据结构:

向量 vector() 组内元素必须类型一致,否则将会被强制转换。

(1) 创建向量的三种方式:

<span style="font-size:18px">x <- vector("numeric", length = 10)

x <- 1:4

x <- c("a",12,TRUE)</span>

(2) 强制转换的几个函数:

as.numeric(x) / as.character(x) / as.logical(x)

矩阵 matrix()一列一列的填充元素

按行合并:rbind()按列合并:cbind()

数组 array() 可以有多个维度

列表 list() 可以包含不同类型的元素

因子 factor()

(1) 分类数据/有序 vs. 无序

(2) 整数向量+标签(label)(优于整数向量)

Male/Female vs. 1/2

常用于lm(),glm()

(3) levels设置基线水平

table() 查看因子信息unclass() 去除因子属性日期

x <- Sys.Date() 得到系统当前日期

julian(x) x距离1970-01-01的天数

时间 POSIXct / POSIXlt

POSIXct:整数,常用于存入数据框 as.POSIXct()

POSIXlt:列表,还包含星期、年月日等信息。as.POSIXlt()

strptime(x, format = "...") 将一般格式转化为时间格式

1.变量变换as.array(x),as.data.frame(x),as.numeric(x),as.logical(x),as.complex(x),as.character(x),...转换变量类型;使用如下命令可得到全部列表,methods(as)factor():将一个向量转化为一个因子2.变量信息is.na(x),is.null(x),is.array(x),is.data.frame(x),is.numeric(x),is.complex(x),is.character (x),...检验变量的类型;使用如下命令得到全部列表,methods(is)length(x):x中元素的个数dim(x):查看变量的维数;重新设置的维数,例如dim(x)=c(3,2)dimnames(x):重新设置对象的名称nrow(x):行的个数ncol(x):列的个数class(x):得到或设置x的类;class(x)<-c(3,2)unclass(x):删除x的类attr(x,which):得到或设置x的属性whichattributes(obj):得到或设置obj的属性列表fix,edit:对数据框数据进行表格形式的编辑3.数据选取和操作which.max(x):返回x中最大元素的指标which.min(x):返回x中最小元素的指标rev(x):翻转x中所有的元素sort(x):升序排列x中的元素;降序排列使用:rev(sort(x))cut(x,breaks):将x分割成为几段(或因子);breaks为段数或分割点向量match(x,y):返回一个和x长度相同且和y中元素相等的向量不等则返回NAwhich(x==a):如果比较操作为真(TRUE),返回向量x的指针choose(n,k):组合数的计算na.omit(x):去除缺失值(NA)(去除相关行如果x为矩阵或数据框)na.fail(x):返回错误信息,如果x包含至少一个NAunique(x):如果x为向量或数据框,返回唯一值

今天在写一个求众数的函数,思路很简单:统计unique数值,并计算其频数,取最大值就是,函数如下:

众数值没有问题,但是此处出现了因子水平levels,函数最后一步提取的应该是[1,1]位置的数值才对。怎么出现因子水平呢???

首先检验下众数

问题出现在table函数上,table函数作用就是统计一组向量中unique元素的数量,具体参数请参照R帮助文件。R中这样解释table函数 , “ table uses the cross-classifying factors to build a contingency table of the counts at each combination of factor levels ”。 因此,table()返回的结果是带有因子水平的。

这时候,当然想把因子变量转换成数值变量, as.numeric() , 这时候神奇的事情发生了:

此处呼叫万能的网友,知乎博主[醉一心],CSDN博主[YaoRaoLov]给出了答案。参照以下博文:

https://zhuanlan.zhihu.com/p/147799787

https://ask.csdn.net/questions/707550?sort=comments_count

再来看下table()返回的数据框e

因子型变量在unclass()函数的作用下,显示出真面目:原来就是 一个个数值型变量

这也就是为什么对其进行数值型转化时会得到1,2,3,4等一系列数值的原因。

它的 真实值存储在Levels里面

上述众数函数修改为下