R的数据结构和数据类型
向量(vector)
一维结构。向量中的所有元素必须是相同数据类型。
- 数值型向量 Numeric/ Integer/ Double
- 字符型向量 Charactor
- 逻辑型向量 Logical
(3 > 5) & (4 == 4) #与
FALSE
(TRUE == TRUE) | (TRUE == FALSE) #或
TRUE
((111 >= 111) | !(TRUE)) & ((4 + 1) == 5) #!A是对A的否定
TRUE
- 因子 Factor
a <- c(1, 2, 5, 3, 6, -2, 4) # 数值型向量
b <- c("one", "two", "three") # 字符型向量
c <- c(TRUE, NA, FALSE) # 逻辑型向量
province <- c("四川", "湖南", "江苏", "四川", "四川", "四川", "湖南", "江苏", "湖南", "江苏") pf <- factor(province) #创建 province 的因子 pf
pf
[1] 四川 湖南 江苏 四川 四川 四川 湖南 江苏 湖南 江苏
Levels: 湖南 江苏 四川
矩阵(matrix)
二维结构。矩阵中所有元素也必须是统一数据类型,如不一样,R会强制转换数据类型。
my_matrix <- matrix(1:20, nrow = 4, ncol = 5)
my_matrix
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
(mat1<-matrix(1:12,6, byrow=T)) #可以加括号,直接看到赋值结果。byrow=T代表按行排列,=FALSE表示按列排列
mat1
mat2<-matrix(1:12,3,4, byrow=F)
mat2
数组(array)
数组可以是二维的也可以是多维的。
a <- array(data=1:18,dim=c(3,3,2))
a
, , 1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
, , 2
[,1] [,2] [,3]
[1,] 10 13 16
[2,] 11 14 17
[3,] 12 15 18
数据框(data frame)
二维结构。数据框中同一列元素类型一致,不同列可以不同;每一列有名称,列的名称不能以数字开头;列名称一定不能重复;行名和列名不能重复。
patientID <- c(1, 2, 3, 4)
age <- c(25, 34, 28, 52)
diabetes <- c("Type1", "Type2", "Type1", "Type1")
status <- c("Poor", "Improved", "Excellent", "Poor")
patientdata <- data.frame(patientID, age, diabetes, status)
patientdata
patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
列表(list)
list好比是一个仓库,不限制数据类型,可以是vector,matrix,array,dataframe,甚至是list
list是一维的!!!
g <- "My First List"
h <- c(25, 26, 18, 39)
j <- matrix(1:10, nrow = 5)
k <- c("one", "two", "three")
mylist <- list(title = g, ages = h, j, k,patientdata)
mylist
$title
[1] "My First List"
$ages
[1] 25 26 18 39
[[3]]
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
[[4]]
[1] "one" "two" "three"
[[5]]
patientID age diabetes status
1 1 25 Type1 Poor
2 2 34 Type2 Improved
3 3 28 Type1 Excellent
4 4 52 Type1 Poor
向量提取和产生
a <- c(1, 2, 5, 3, 6, -2, 4)
a[3]
a[c(1, 3, 5)] #提取第1,3,5位的元素
a[2:6] #提取2,3,4,5,6位的元素
a[a>3&a<5] #如果去掉中括号就变成了逻辑判断语句啦
a[-1] #提取a中除了第1位以外的元素
a[-1:-3] #提取a中除了第1,2,3位以外的元素
a[-c(1, 3, 5)] #负号可以提出来,表示提取a中除了第1,3,5位以外的元素
-
rnorm()
rnorm(n, mean = 0, sd = 1):r==random。类似的还有dnorm, pnorm, qnorm。d= density = 密度, p= probability = 概率 , q=quantile = 分位。
y <- rnorm(1000) #产生1000个服从正态分布的随机数
-
rep()
rep(x, times = 1, length.out = NA, each = 1)
each:x中每个元素被重复each次
times: 重复x这个向量的次数
length.out:输出向量的期望长度
rep(2:5, 2)
[1] 2 3 4 5 2 3 4 5
rep(2:5, 1:4)
[1] 2 3 3 4 4 4 5 5 5 5
rep(1:3, times = 4, each = 2)
[1] 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3
rep(2:5, 2, length.out = 10)
[1] 2 3 4 5 2 3 4 5 2 3
-
seq()
seq(from = , to = , by = , length.out = , ...)
from :向量起点
to: 向量终点
by: 步长
length.out: 期望输出的向量长度
seq(1, 10, by = 0.5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0
矩阵提取
x <- matrix(1:6, 2, 3)
x[2,2]
x[2,]
x[,2]
x[1:2,2:3]
y <- c(3, 4, 5, 6)
pmax(x, y) #pmin,pmax用来求相同位置的最大数和最小数
[,1] [,2] [,3]
[1,] 3 5 5
[2,] 4 6 6
Warning message:
In pmax(x, y) : an argument will be fractionally recycled
数组提取
a <- array(data=1:18,dim=c(3,3,2))
a[2, 3, 2]
[1] 17
数据框提取
数据框可用“$”提取特定列
patientdata[,"age"]
[1] 25 34 28 52
patientdata$age
[1] 25 34 28 52
列表提取
[]代表提取list中的特定元素,其数据结构还是list;[[]]代表提取list中特定元素的内容,其数据结构跟提取元素一致。
> mylist[3]
[[1]]
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
> mylist[[3]]
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
> class(mylist[3])
[1] "list"
> class(mylist[[3]])
[1] "matrix"
网友评论