2019-07-28[R语言编程艺术-2]

chapter3 向量

y <- matrix(c(1,2,3,4),ncol = 2)#按列存储,可用byRow= TRUE,按行排列
  • 矩阵的运算和索引:类似向量
  • 矩阵筛选
#判断条件返回的是布尔类型
#which()函数返回的是元素的位置

对矩阵行列调用函数

apply(), tapply(),lapply()

apply()

apply(m,dimcode,f,fargs)

  • m矩阵
  • dimcode,1,按行操作,2,按列操作
  • f 应用函数
  • fargs f的可选参数集
 z<- matrix(c(1,2,3,4,5,6),ncol = 2)
> z
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> f<-function(x) x/c(2,8)
> y<-apply(z,1,f)
> y
     [,1]  [,2] [,3]
[1,]  0.5 1.000 1.50
[2,]  0.5 0.625 0.75
> y<-t(apply(z,1,f))
> y
     [,1]  [,2]
[1,]  0.5 0.500
[2,]  1.0 0.625
[3,]  1.5 0.750

增加或删除矩阵行列

类似向量,可通过重赋值的方法

  • cbind()
  • rbind()

注意:创建向量/矩阵很耗时间,若在循环中重复创建矩阵,浪费很多时间,可以先定义好一个大的空矩阵,在循环中逐行/逐列赋值,或者删减

避免意外降维

此时r是一个向量,而非1x2矩阵,使用drop = FALSE,避免意外降维

> y<-(c(1,2,3,4,5,6),ncol = 2)
> y
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> r<-y[2,]
> r
[1] 2 5
> r<-y[2,,drop= FALSE]
> r
     [,1] [,2]
[1,]    2    5

命名

  • colnames(),rownames()

chapter4列表

  • 创建列表
j<-list(name = "Joe",salary=5000,union= T)
#列表也是向量,也可以用vector()创建
> z<-vector(mode = "list")
> z[["abc']] <-3
> z
$abc
[1] 3

列表的常规操作

  • 三种方法访问lst中的组件c,返回的是c的数据类型
lst$c
lst[["c"]]
lst[[i]],i 是c在list中的数字编号
  • 单中括号,返回列表

列表删减

z$c <- "sailing"
#使用索引
z[[4]] <-28
z[5;7]<-c(1,2,3)
#删除
z$b <-NULL
#拼接
c(lst,list(5))

访问列表元素

length(j)#返回组件个数
names(j)#返回组件各名称
unlist()#获取列表的值,通常是字符串向量

优先级排序,NULL

  • lapply(), sapply()
  • 递归型,列表的组件也可以是列表

chapter5 数据框

数据框是每个组件长度都相等的列表

  • 访问数据框的组件
d[[1]]
d$kids
d[,1]
#提取子数据框
d[2:5,2,drop = FALSE]#创建数据框,drop=FALSE,得到一个数据框
  • 缺失值处理
na.rm = TRUE#忽略缺失值
subset()#无需设定na.rm=TRUE
complete.cases()#从数据框中去掉含有一个意思NA的观测
  • rbind(),cbind()
rbind(d,list("Laura",19))#添加新行使用数据框or列表的形式

-apply()
-merge()#合并数据框

merge(d1,d3,by.x = "kids",by.y="pals")#在两个数据框中,名称不同意义一样,合并在一起

你可能感兴趣的:(2019-07-28[R语言编程艺术-2])