R|入门-学习笔记(一)

tags: R 入门 iMooc 数据类型 函数


这是在 imooc 慕课网上听课做的一点内容。目前看来十分没有逻辑。感觉上和matlab挺像,但是一些数据类型还是没有什么概念。

1. 数据类型

查看数据x类型:class(x)
字符(character), 它们常常被引号包围
逻辑类型(logic),TRUE,FALSE和NA,全部大写
复数(complex),1+2i
数值型(numeric),可以是整数或者小鼠
整数(integer),在数字后面加上大写的L
列表(list) S 对象的向量
因子(factor) 常用于标记样本

1.1逻辑向量

>, <, >=, <=,
不等:!=
相等:==
交集(and):&
并集(or):|

1.2 字符型

字符向量也可以用c()拼接

1.3 产生序列

  • rep(a, times = value),重排。
  • seq(from = value, to = value, by = value, length = value). 例如,seq(1,10,2),从1开始,步长为2,到10,结果是[1,3,5,7,9]

2. 数据结构

2.1 向量

2.1.1 产生向量

函数vector有两个参数:类型(mode)和长度(length),创建的向量中元素值取决于参数所指定的数据类型:数值型向量则元素值都为0,逻辑型都为FALSE,字符型都为""。以下三个函数有几乎相同的效果(创建一个向量)并且只有一个参数即长度:numeric(),logical(),和character()。

  • vector(mode = 'character', length = 5) 产生一个字符类型的空向量。
  • x1 <- 1:4 产生int向量,[1 2 3 4 ]
  • x2 <- c(1,2,3,4) 产生num向量 [1 2 3 4]
  • x2 <- c(TRUE,1,'3','a') 产生char向量 ['TRUE','1','3','a']
  • as.character(x) 强制转换类型
  • names(x) <- c('name1','name2','name3') 添加数据标签

2.2 矩阵

  • 向量+维度
  • 先row,再col
  • attribute(x) 查看属性

2.2.1 产生矩阵

用matrix来创建:matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

选项byrow表示数据给出的值是要按列填充(缺省值)还是按行填充
(如果为TRUE)。可以通过选项dimnames给行列命名。

e = c(1:6)
f = matrix(e,2,3,byrow=TRUE)
f
    [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

另一种创建矩阵的方法是给维数适当的赋值,这种方法也能改变已有矩阵的维度

> dim(e)
NULL
> dim(e) <- c(2,3)
> e
    [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> dim(e) <- c(3,2)
> e
    [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

2.2.2 矩阵拼接

  • rbind(x,x1) row拼接(纵向)
  • cbind(x,x1) col拼接(横向)

2.2.3 矩阵维度的命名

> dimnames(e) <- list(c('1','2','3'), c('a','b'))
> e
  a b
1 1 4
2 2 5
3 3 6

2.3 数组

维度可以到达多维(三维及以上)的矩阵,R中的矩阵只能有2维
创建方法是 x <- array(1:24, dim = c(2,3,4))

2.4 列表(list)

可以包含不同类型的对象,通过双重方括号或者名词来访问

l <- list('a', 2.4, TRUE, 4L, -2)
l <- list(x1 = 'a', x2 = 2.4, x3 = TRUE, x4 = 4L, x5 = -2) # 可以命名,通过l[[2]]或l[['x2']]访问
l <- list(c(1,2,3),c(2,4,5))

2.5 因子

  • 处理分类变量。包括顺序变量和命名变量。通过在factor函数中添加参数 order = TRUE来构造顺序变量。
  • 整数变量+标签(优于整数变量)。常用于线性模型

一个因子不仅包括分类变量本身,还包括变量不同的可能水平(即使它们在数据中不出现)。因子函数factor用下面的选项创建一个因子:

x <- factor(c('male','male','male','female','female'))
x
[1] male   male   male   female female
Levels: female male

y <- factor(c('male','male','male','female','female'), levels = c('male','female') )
y
[1] male   male   male   female female
Levels: male female # 和x相比,顺序不同。依次编号

factor(x, levels = sort(unique(x), na.last = TRUE), labels = levels, exclude = NA, ordered = is.ordered(x))`

levels 用来指定因子可能的水平(缺省值是向量x中互异的值);labels用来指定水平的名字;exclude表示从向量x中剔除的水平值;ordered是一个逻辑型选项用来指定因子的水平是否有次序。回想数值型或字符型

对因子进行整体性了解,可以使用table(x)查看因子不同水平的数量。还可以去掉因子的属性levels,使用unclass(x),会变成一个integer的向量。

2.6 缺失值

  • NA/NaN, NaN 属于NA,NA不属于NaN
  • NaN一般用于数字缺失值,但是NA更广。同时NA有类型属性,如字符型整数型
  • is.na()is.nan() 判断是否是缺失值

2.7 数据框 data frame

储存表格数据。
可以视为各个元素长度相同的列表

  • 每个元素代表1列数据(竖着的1列)
  • 每个元素的长度代表行数
  • 元素类型可以不同

2.7.1 输入数据框

t <- data.frame(第一列,第二列,...,row.names = ,)

> t <- data.frame(id = c(1,2,3,4),grade = c(70,77,89,90))
> t
   id  grade
1  1    70
2  2    77
3  3    89
4  4    90
  • nrow和ncol可以分辨查看行和列数
  • 和矩阵的差别在于,每一列类型可以不同
  • 可以用data.matrix()转化为矩阵

2.8 日期和时间(未完待续)

date(),
用as.date()可以把2016-07-20储存为date格式。用weekdays()、montths()、quarters()能分别告诉我们哪一天哪一月哪一季度,julian()

如何选出数据集中的某一个?

如果知道名称name,可以用$name来选出
例如

> x<- data.frame(v1 = 1:3,v2 = c('a','b','c'))
> x
  v1 v2
1  1  a
2  2  b
3  3  c
> x$v1
[1] 1 2 3
> x$v1>2
[1] FALSE FALSE  TRUE
> x[x$v1>1,]
  v1 v2
2  2  b
3  3  c
> x[which(x$v1>1),]
  v1 v2
2  2  b
3  3  c

3. apply函数

apply系列函数的基本作用是对数组(array,可以是多维)或者列表(list)按照元素或元素构成的子集合进行迭代,并将当前元素或子集合作为参数调用某个指定函数。vector是一维的array,dataframe可以看作特殊的list。

这些函数间的关系

作用目标 在每个元素上应用 在子集合上应用
array apply tapply
list lapply(...) by

其中lapply(...)包括一系列函数

lapply
   |
   | -> 简化版: sapply
   |             | -> 可设置返回值模板: vapply
   |             | -> 多变量版: mapply
   |
   | -> 递归版: rapply

另外vector比较奇怪,vector是一维的array,但是却不全是和array使用相同的函数。在按元素迭代的情况下,使用和list一样的lapply函数;而在按子集合迭代的情况下,tapply和by都能用,只是返回值形式不同。

apply沿着某一维度进行处理

apply(array, margin, FUN, ...)
在array上,沿margin方向,依次调用FUN。返回值为vector。margin表示数组引用的第几维下标(即array[index1, index2, ...]中的第几个index),1对应为1表示行,2表示列,c(1,2)表示行列。例如 apply(x,2,sum)对列求和。

lapply 循环处理列表中的每一个元素

lapply(列表,函数/函数名,其他参数)
sapply 和lapply一样,只是化简了结果,能用向量就用向量,能用矩阵就用矩阵。

mapply lapply的多元版本

mapply(函数,数据,参数)以下两句效果是一样的

list(rep(1,4),rep(2,3),rep(4,2),rep(4,1))
mapply(rep,1:4,4:1)

tapply对向量子集进行操作

tapply(向量,因子/因子列表,函数)
tapply(array, indices, margin, FUN=NULL, ...)

按indices中的值分组,把相同值对应下标的array中的元素形成一个集合,应用到FUN。类似于group by indices的操作。如果FUN返回的是一个值,tapply返回vector;若FUN返回多个值,tapply返回list。vector或list的长度和indices中不同值的个数相等。

当FUN为NULL的时候,返回一个长度和array中元素个数相等的vector,指示分组的结果,vector中相等的元素所对应的下标属于同一组。例如,返回c(1, 2, 1, 3, 2), 表示根据传入的indices,第1、3个元素作为一组,第2、5个元素作为一组,第4个元素作为一组。

例如

x <- c(1:4,2:5,3:6)
f <- gl(3, 4) #产生因子水平(分组),三个因子每因子5个
tapply(x,f,mean)

3.2排序

sort
order 给出排序后的下标,多个标准

x <- data.frame(v1 = 1:5, v2= 2:6, v3 = 3:7)
x[order(x$v1, x$v2),]

3.3总结数据信息

head
tail
summary
str
table

sum
any
all

xtabs 交叉表

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,565评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,021评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,003评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,015评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,020评论 5 370
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,856评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,178评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,824评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,264评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,788评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,913评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,535评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,130评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,102评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,334评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,298评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,622评论 2 343

推荐阅读更多精彩内容