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

image

 

新建项目

image

# 获取工作目录
> 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)

 

posted @ 2026-04-27 23:36  asaca_r  阅读(37)  评论(0)    收藏  举报