R基础(二):数据结构(向量、数据框)

新建项目

# 获取工作目录
> getwd()
[1] "D:/R_project/R_basic"
# ?+函数名,获取帮助文档
> ?getwd
快捷键:ctr+l清空屏幕
一、向量
2.1 创建变量
# 创建向量
a <- c(4, 6, 0, 8, 1)
b <- 4 # 相当于c(4),R会自动转换为变量
查看数据类型
# 查看数据类型
> class(a)
[1] "numeric"
2.2 取值
## 1.按位置取值。R从1开始
a[1]
[1] 4
a[1:3] # 包括第3位
[1] 4 6 0
a[c(1, 3, 5)] # 不能写a[1, 3, 5]。必须写成向量
[1] 4 0 1
a[-c(1, 3, 5)]
[1] 6 8
## 2.按逻辑取值
a>2 # 会对向量的每一个元素执行相同运算
[1] TRUE TRUE FALSE TRUE FALSE
a[a>2] # 只提取TRUE的元素
[1] 4 6 8
a[a%%2 == 0]
[1] 4 6 0 8
# 为向量命名
names(a) <- c('chr1', 'chr2', 'chr3', 'chr4', 'chr5')
# 3.按命名取值
a["chr1"]
chr1
4
a[c("chr1", "chr3")] # 不能写成a["chr1", "chr3"],必须转成向量
chr1 chr3
4 0
2.3 计算
# 向量相加
## 1.长度相同:相同位置的元素相加
b <- c(2,3,4,5,8)
a+b
[1] 6 9 4 13 9
## 2.长度不同:较短的向量重复(循环),直到长度和较长的向量一致,然后再逐元素相加。
c <- c(2,3)
a+c
[1] 6 9 2 11 3
Warning message:
In a + c : longer object length is not a multiple of shorter object length
## 3.加一个数:会对向量的每一个元素执行相同计算
## 相当于将这个数扩展为与向量相同长度,再按位相加
a <- c(4,6,0,8,1)
a+2
[1] 6 8 2 10 3
二、数据框
2.1 创建
# 数据框。使用 data.frame 创建数据框,数据框的每一列叫做一个变量(variables)一行叫做一条观测(obs.)。
df <- data.frame(S1 = c(1, 2, 3, 4, 5),
S2 = c(5, 4, 3, 2, 1),
S3 = runif(5, -10, 10), # -10 到 10 之间,生成 5 个数
S4 = runif(5, -10, 10))
# 查看列名
colnames(df)
[1] "S1" "S2" "S3" "S4"
# 查看行名
rownames(df)
[1] "1" "2" "3" "4" "5"
# 命名行名
rownames(df) <- c("gene1", "gene2", "gene3", "gene4", "gene5")
rownames(df)
[1] "gene1" "gene2" "gene3" "gene4" "gene5"
# 列数
ncol(df)
# 行数
nrow(df)
# 行和列数
dim(df)
# 查看前后两行
head(df, n = 2)
tail(df, n = 2)
2.2 取值
# 1.按列取
df$S1
# 2.按位置取
df[2,2] # [行,列]
df[1:3,1:3]
df[,1:3] # 留空表示取所有
# 3.按逻辑取
subset(df, S1>1, select = c("S2", "S4"))
2.3 计算
# 数据框与向量运算。向量循环补齐,扩展成与数据框的向量相同长度(行数),再逐条向量按位加
df <- data.frame(S1 = c(1,2,3,4,5),
S2 = c(5,4,3,2,1),
S3 = c(0,0,0,0,0),
S4 = runif(5, -10, 10))
df + c(1,2) # 相当于扩展成c(1,2,1,2,1),再与每一列相加
S1 S2 S3 S4
1 2 7 1 6.4650581
2 4 5 2 9.9525201
3 4 5 1 -0.6517807
4 6 3 2 -3.4928630
5 6 3 1 -7.0924926
# 按行按列运算。更多功能参考matrixStats包:https://cran.r-project.org/web/packages/matrixStats/vignettes/matrixStats-methods.html
rowSums(df)
colSums(df)
rowMeans(df)
# apply函数
apply(df, 2, mean)
浙公网安备 33010602011771号