涉及函数: c()
data.frame()
list()
1. 直接创建
a <- c(name1 = 1, name2 = 2)
mydata <- data.frame(name = c("Mike", "Tom", "Tony"), height = c(160, 180, 170), stringsAsFactors = F )
mylist <- list(vector1 = c( , , ,...), strvector2 = c("","","",...), matrix3 = matrix(), ...)
2. 先创建基本元素,再组合
name1 <- 1
name2 <- 2
a <- c(name1, name2)name <- c("Mike", "Tom", "Tony")
height <- c(160, 180, 170)
mydata <- data.frame(name, height)mylist <- list(namevec1, namestr2, namematrix3)
1. 向量和列表创建后的命名names(x)
names(x) <- c("a", "学校", "TT", "#", "5")
注 : 必须在向量和列表创建后,再使用names对其元素命名.
如果把names= 看作一个参数加入c()和list()函数,list会多了一个名称为"names"的元素
2. 矩阵和数据框行列的命名
创建时命名
1)矩阵 : 在matrix()中加入参数dimnames = list()
2)数据框 : 在data.frame()中参加参数row.names=
注 : 数据框创建时只能添加行名参数
创建后命名
矩阵和数据框的所用函数和用法是相同的 : colnames(x)<-
rownames(x)<-
数据访问使用[ ],函数使用( )
1. 通用访问方法:indice
访问向量x的第二个和第七个元素 x[c(2,7)]
访问矩阵x的第三个到第五个元素 x[3:9, 5]
注: 列表稍有不同
访问列表x的第二个元素x[[2]]
访问列表x的子列:第二个元素x[2]
访问列表x的子列:第三个元素和第八个元素x[c(3,8)]
2. 命名后,可以用名称为索引访问 :
用于向量,数据框和列表
x["name"]
x[["name"]]
注 : 矩阵不能这样访问
3.命名后也可以用$索引:数据框,列表
x$name
1. 元素的增加
1) 直接赋值型 : 向量,数据框,列表,矩阵
z[3:4] <- c(T,F)
z["c"] <- "sailing"
mydata$Nat<-c("EU","JA","EU")
注 : 直接赋值也可以用于元素的更改
y[,c(1,3)] <- matrix(c(1,1,8,12),nrow=2)
2)使用函数型 : 矩阵,数据框 rbind()
cbind()
2. 元素的删除
1) 索引访问+负号"-"
删除向量x的最后一个元素 x[-length(x)]
删除矩阵x的第四列 x[,-4]
2) 任何访问+NULL
x["name"] <- NULL
x$name <- NULL
3) 附 : 缺失值的删除na.omit(x)
na.omit(x)只能对向量,矩阵和数据框使用,在对矩阵和数据框使用时,会删去NA所在的一行
注 : 列表和因子不需要筛选
1. 普通筛选 : 向量化运算 + 下标索引
z <- c(1, 2, 3, 4, 21, 4, 2, 3)
z[z*z >= 10]
[1] 4 21 4a<-matrix(3:32, 5, 6)
a[, 1] ,> 6
[1] FALSE FALSE FALSE FALSE TRUEmydata[mydata$speed>10,]
name tall answer speed
laa tom 175 FALSE 20
laaa jack 170 TRUE 15
2. which()函数
1). Description
Give the TRUE indices of a logical object, allowing for array indices
2). Usagewhich(x, arr.ind = FALSE)
3). Examples
a<-matrix(c(1, 2, 1, 1, 1, 2, 3, 1, 2, 3), 5, 2)
which(a>2)
[1] 7 10which(a>2, arr.ind = TRUE)
row col
[1,] 2 2
[2,] 5 2which(mydata$age == 20)
[1] 1 5
3. subset() 函数
1) subset函数和which函数在NA的处理上与普通筛选具有不同
x <- c(1, 2, 3, rep(8, 2), NA, rnorm(2, 1))
x[x > 3]
[1] 8 8 NAwhich(x > 3)
[1] 4 5subset(x, x > 3)
[1] 8 8
2)usage : subset(x, test, select = )
subset(a, a[, 1]>6)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 7 12 17 22 27 32subset(airquality, Temp > 95, select = c(Ozone, Temp))
Ozone Temp
120 76 97
1. sort(x, decreasing = )
sort(c(10 : 3, 2 : 12), method = "shell", index.return = TRUE)
$x
[1] 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 12
$ix
[1] 9 8 10 7 11 6 12 5 13 4 14 3 15 2 16 1 17 18 19is.unsorted(sort(mydata$age))
[1] FALSE
> is.unsorted(sort(mydata$age), strictly = TRUE)
[1] TRU:25])
[1] 1 2 3 5 5 6 6 7 7 7 7 7 8 8 9 9 10 12 12 12 12 13 15 20 28
2. rank()
我觉得rank不适合用于数据框,就别用了,只用于向量吧
rank(x1 <- c(3, 1, 4, 15, 92))
[1] 2 1 3 4 5x2 <- c(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5)
> rank(x2, ties.method= "first")
[1] 4 1 6 2 7 11 3 10 8 5 9rank(x2, ties.method= "random")
[1] 4 2 6 1 8 11 3 10 7 5 9
3. order()
x<-c(1,3,4,6,3,2,5,1) > order(x) [1] 1 8 6 2 5 3 7 4
> c(1,2,5)+c(3,2)
[1] 4 4 8
注:order(x)[1] = which.min(x)order(mydata$sex, mydata$height)
1. 矩阵 : apply() 和 sweep()
1) apply(x, MARGIN, FUN)
2)sweep(x, MARGIN, STATS, FUN = “-”)
sweep(A, 1, A.min)
2. 数据框和列表 : lapply() 和 sapply()
区别:输出格式不同
lapply(list(1:3,25:29),median)
[[1]]
[1] 2
[[2]]
[1] 27sapply(list(1:3,25:29),median)
[1] 2 27
3. 因子 : tapply()
ages <- c(25,26,55,37,21,42)
affils <- c("R","D","D","R","U","D")
tapply(ages,affils,mean)
D R U 41 31 21
1. 生成固定间隔的向量 seq(from, to, by, length.out, along.with)
seq(from = 100, to = 1, by = -5)
seq(from = 100, to = 1, length.out = 20)
x <- c(4, 5, 7)
seq(x) [1] 1 2 3
seqalong(along.with)
seqlen(length.out)
2. 重复向量常数rep(x, times, length.out, each)
rep(c(1, 3, 5), 3)
[1] 1 3 5 1 3 5 1 3 5
each
rep(c(1, 3, 5), each = 3)
[1] 1 1 1 3 3 3 5 5 5rep(c(1, 3, 5), c(1, 2, 3))
[1] 1 3 3 5 5 5rep(1:4, each = 2, times = 3)
[1] 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4
rep.int(x, times)
rep_len(x, length.out)
all()
any()
判断向量是否相等(后两个函数作用相同)
x <- c(1, 2)
y <- c(3, 2)
x == y
[1] FALSE TRUEall(x == y)
[1] FALSEidentical(x, y)
[1] FALSE
向量化运算符函数:应用到向量的每一个元素,如 求平方根、对数和三角函数、取整round等。
注意事项
x <- c(2,1,3)
x[7]<- 10
x
[1] 2 1 3 NA NA NA 10
NA的处理
x<-c(1,NA,2,3)
mean(x, na.rm=T)
[1] 2mean(x)
[1] NA
x <- c(6:-4)
ifelse(x >= 0, sqrt(x), NA)
[1] 2.449490 2.236068 2.000000 1.732051 1.414214 1.000000 0.000000 NA NA NA NA
matrix(vector, nrow, ncol, byrow=F, dimnames=list(char_vector_rownames,char_vector_c olnames))
as.vector
array(vector, dimensions, dimnames)
使用dim()函数创建矩阵和数组
z <- c(5 : 34)
dim(z) <- c(2, 5, 3)
z
, , 1[, 1] [, 2] [, 3] [, 4] [, 5]
[1,] 5 7 9 11 13
[2,] 6 8 10 12 14, , 2
[, 1] [, 2] [, 3] [, 4] [, 5]
[1,] 15 17 19 21 23
[2,] 16 18 20 22 24, , 3
[, 1] [, 2] [, 3] [, 4] [, 5]
[1,] 25 27 29 31 33
[2,] 26 28 30 32 34
1. 行数与列数
1)nrow(), ncol() 和 dim()
nrow(A)
[1] 3ncol(A)
[1] 4dim(A)
[1] 3 4
2) row() 和 col()
row(z)
[, 1] [, 2] [, 3]
[1,] 1 1 1
[2,] 2 2 2
2. rowSums() 和 rowMeans()
1. 矩阵的转置t()
2. 矩阵的乘法
AB : A%*%B
A'B: crossprod(A,B)
3. Choleskey分解:chol()
5. 提取对角线元素diag(x)
生成对角线上全为一个数,非对角线上全为另一个数的方阵。
attach(mtcars)
summary(mpg)
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.40 15.43 19.20 20.09 22.80 33.90
detach(mtcars)
summary(mpg)
Error in summary(mpg) : object 'mpg' not found
table()
table(mydata$age, mydata$sex)
20 21 22
F 1 0 2
M 0 1 0
merge()
merge(a,b,by.x = “ax”,by.y = “by”)
查看数据框结构str()
数据框的重新编辑fix()
数据框的随机抽样
sample(1 : nrow(mydata), 3, replace = FALSE)
[1] 6 1 3
因为列表也是一种向量, 所以可以用vector()创建
z <- vector(mode="list")
z[["numeric"]] <- c(1,3)
z[["logical"]] <- TRUE
z $numeric [1] 1 3
$logical [1] TRUE
c(lst1,lst2)
factor()
factor(x = character(), levels, labels = levels,exclude = NA, ordered = is.ordered(x), nmax = NA)
factor(LETTERS[3:1])
[1] C B A
Levels: A B C
创建有序向量
1)默认为因子输入的序
factor(LETTERS[3:1], ordered = TRUE)
[1] C B A
Levels: A < B < C
2)人为添加因子的序
factor(LETTERS[3:1], ordered = TRUE, levels = c("B", "A", "C"))
[1] C B A
Levels: B < A < C
split()
g <- c("a","b","a","a","c","b","c","d","b")
split(1:length(g),g)
>$a
>[1] 1 3 4
$b
[1] 2 6 9
$c
[1] 5 7
$d
[1] 8
by()
老师给的示例
data(mtcars)
by(mtcars, mtcars$am, function(m)lm(m$mpg~m$hp))
mtcars$am: 0
Call: lm(formula = m$mpg ~ m$hp) Coefficients: (Intercept) m$hp 26.62485 -0.05914mtcars$am: 1
Call: lm(formula = m$mpg ~ m$hp)
Coefficients: (Intercept) m$hp 31.84250 -0.05873