专题4 隐式循环、专题5 数据框连接

2024-04-18 14:06:27 浏览数 (2)

矩阵和数据框每行每列处理 列表向量中每个元素处理

apply()族函数

1.apply 处理矩阵或数据框

代码语言:r复制
#apply(X, MARGIN, FUN, …) 
#其中X是数据框/矩阵名;
#MARGIN为1表示行,为2表示列,FUN是函数

test<- iris[1:6,1:4]

apply(test, 2, mean) # 对test的每一列求平均
代码语言:r复制
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
##    4.9500000    3.3833333    1.4500000    0.2333333
代码语言:r复制
apply(test, 1, sum) # 对test的每一行求和
代码语言:r复制
##    1    2    3    4    5    6 
## 10.2  9.5  9.4  9.4 10.2 11.4
代码语言:r复制
head()# 取前几个
tail()# 取后几个

2.lapply(list, FUN, …)

代码语言:r复制
# 对列表/向量中的每个元素实施相同的操作 得到列表
lapply(1:4,rnorm)
代码语言:r复制
## [[1]]
## [1] -0.1125071
## 
## [[2]]
## [1] -0.7722204  0.2188351
## 
## [[3]]
## [1] -0.2324538 -0.4484360 -2.0208578
## 
## [[4]]
## [1] 0.59086709 0.48062406 0.05737153 1.20811435
代码语言:r复制
sapply() # 简化为向量或矩阵,不能简化返回和lapply一样的结果

数据框连接

代码语言:r复制
# 示例数据
test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'), 
                    blood_type = c("A","B","O","AB"))
test1
代码语言:r复制
##     name blood_type
## 1  jimmy          A
## 2 nicker          B
## 3  Damon          O
## 4 Sophie         AB
代码语言:r复制
test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),
                    group = c("group1","group1","group2","group2"),
                    vision = c(4.2,4.3,4.9,4.5))
test2
代码语言:r复制
##     name  group vision
## 1  Damon group1    4.2
## 2  jimmy group1    4.3
## 3 nicker group2    4.9
## 4   tony group2    4.5
代码语言:r复制
library(dplyr)
inner_join(test1,test2,by="name") #取交集
代码语言:r复制
##     name blood_type  group vision
## 1  jimmy          A group1    4.3
## 2 nicker          B group2    4.9
## 3  Damon          O group1    4.2
代码语言:r复制
left_join(test1,test2,by="name") #以左边(test1)为准连接
代码语言:r复制
##     name blood_type  group vision
## 1  jimmy          A group1    4.3
## 2 nicker          B group2    4.9
## 3  Damon          O group1    4.2
## 4 Sophie         AB   <NA>     NA
代码语言:r复制
right_join(test1,test2,by="name")
代码语言:r复制
##     name blood_type  group vision
## 1  jimmy          A group1    4.3
## 2 nicker          B group2    4.9
## 3  Damon          O group1    4.2
## 4   tony       <NA> group2    4.5
代码语言:r复制
full_join(test1,test2,by="name") # 取全集,NA补充缺失值
代码语言:r复制
##     name blood_type  group vision
## 1  jimmy          A group1    4.3
## 2 nicker          B group2    4.9
## 3  Damon          O group1    4.2
## 4 Sophie         AB   <NA>     NA
## 5   tony       <NA> group2    4.5

生信技能树

0 人点赞