網站首頁 編程語言 正文
前言
在R語言中,apply系列函數可以對向量、矩陣、數據框一次性對整體數據應用函數運算,非常方便
一、apply()函數
定義:apply()函數按矩陣的行或列方向應用指定函數。
apply(
x # 數組或矩陣
MARGIN #應用函數的方向,1行2列
FUN # 應用的函數
)
# 返回值根據數據Data的數據類型與Fun的返回值自動判斷返回的數據類型
這里舉個例子:
s <- matrix(1:9,ncol = 3)
apply(s,1,sum)
apply(s,2,sum)
即可得到下列結果:
apply(s,1,sum)
[1] 12 15 18
apply(s,2,sum)
[1] ?6 15 24
在舉一個R語言自帶的鳶尾花數據集例子:
apply(iris[,1:4],2,sum)
結果如下:
apply(iris[,1:4],2,sum)
Sepal.Length ?Sepal.Width Petal.Length ?Petal.Width?
? ? ? ?876.5 ? ? ? ?458.6 ? ? ? ?563.7 ? ? ? ?179.9?
如果小伙伴們對鳶尾花數據集不了解可以輸入iris查看。
于此同時R語言中還定義了rowSums(),rowMeans(),colSums(),colMeans()函數對行列進行求和、均值的函數。使用方式也很簡單。
二、lapply()函數
定義:lapply()函數以列表的形式返回函數的結果
lapply(
? X #向量、列表、表達式、數據庫
? FUN #應用的函數
? ... #額外參數,會被傳遞給fun函數
)
繼續使用鳶尾花數據集舉例:
lapply(iris[,1:4],mean)
結果如下:
lapply(iris[,1:4],mean)
$Sepal.Length
[1] 5.843333$Sepal.Width
[1] 3.057333$Petal.Length
[1] 3.758$Petal.Width
[1] 1.199333
可以看到結果以列表的形式返回,可以使用unlist()函數將結果轉換為向量。
unlist(
#將列表轉換為向量
X #R對象
recursive = FALSE #是否對x中的列表進行遞歸轉換
use.names = TRUE #是否保留列表中的值名稱
)
unlist(lapply(iris[,1:4],mean))
結果如下所示:
unlist(lapply(iris[,1:4],mean))
Sepal.Length ?Sepal.Width Petal.Length ?Petal.Width?
? ? 5.843333 ? ? 3.057333 ? ? 3.758000 ? ? 1.199333
三、sapply()函數
sapply()函數與lapply()函數類似,其結果以矩陣、向量的數據類型返回。
定義:向列表,向量、表達式數據等應用指定函數,然后以向量或矩陣形式返回結果。
sapply(
? X #向量、列表、表達式、數據庫
? FUN #應用的函數
? ... #額外參數,會被傳遞給fun函數
)
同樣使用鳶尾花數據集作為例子:
sapply(iris[,1:4], sum)
結果如下:
sapply(iris[,1:4], sum)
Sepal.Length ?Sepal.Width Petal.Length ?Petal.Width?
? ? ? ?876.5 ? ? ? ?458.6 ? ? ? ?563.7 ? ? ? ?179.9?
當fun函數只有一個返回值,sapply()函數返回的就是包含這些值的向量。如果fun函數的結果時大于1的向量,則sapply()函數會返回矩陣。
如下例:
x <- sapply(iris[,1:4], function(x) {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->x >3})class(x)
結果如下:
class(x)
[1] "matrix"
數據如下圖所示:
四、tapply()函數
定義:根據給定的標準,對向量中保存的數據進行分組,然后對各分組應用指定函數,并返回結果。
tapply(
? X #向量
? INDEX #數據分組索引
? FUN #應用的函數
? ... #額外參數
)
舉個例子:
tapply(1:10,rep(1:2,5),sum)
結果如下圖:
tapply(1:10,rep(1:2,5),sum)
?1 ?2?
25 30?
例中1:10表示的是數據1到10,rep(1:2,5)表示將1到2重復5次。1,3,5,7,9屬于1分組,2,4,6,8,10屬于2分組。對它們進行求和,得到上訴結果。
以鳶尾花數據集舉例:
tapply(iris$Sepal.Length,iris$Species,sum)
結果如下所示:
tapply(iris$Sepal.Length,iris$Species,sum)
? ? setosa versicolor ?virginica?
? ? ?250.3 ? ? ?296.8 ? ? ?329.4?
建立一個銷售數據:
m <- matrix(1:8,ncol = 2,
dimnames = list(c("春","夏","秋","冬"),
c("female","male")))
對該數據秋上下半年與性別分別秋銷售之和。
代碼如下:
tapply(m, list(c(1,1,2,2,1,1,2,2),
c(1,1,1,1,2,2,2,2)), sum)
結果如下所示:
tapply(m, list(c(1,1,2,2,1,1,2,2),
+ ? ? ? ? ? ? ? ?c(1,1,1,1,2,2,2,2)), sum)
? 1 ?2
1 3 11
2 7 15
這里是將各個數據的位置建立索引進行分組,而后進行求和。
五、mapply()函數
定義:以列表或向量形式給出的參數傳遞給指定函數,并返回函數執行結果。
mapply(
? FUN #應用的函數
? ... #待傳遞的參數
)
繼續使用鳶尾花數據集舉例(哈哈哈):
mapply(sum,iris[,1:4])
結果如下:
mapply(sum,iris[,1:4])
Sepal.Length ?Sepal.Width Petal.Length ?Petal.Width?
? ? ? ?876.5 ? ? ? ?458.6 ? ? ? ?563.7 ? ? ? ?179.9?
總結
原文鏈接:https://blog.csdn.net/ouyangk1026/article/details/122535256
相關推薦
- 2024-01-16 linux查看外網ip的5種方法
- 2022-11-10 使用python的pandas讀取excel文件中的數據詳情_python
- 2022-06-01 c++深入淺出講解堆排序和堆_C 語言
- 2023-06-18 詳解Go語言中make和new的區別_Golang
- 2022-07-26 Docker部署Golang+Gin和Python+Tornado后端
- 2022-12-24 Docker網絡及容器通信原理詳解_docker
- 2022-04-11 maven發布到nexus的時候報錯maven return code is:400,ReasonP
- 2022-04-03 golang?歸并排序,快速排序,堆排序的實現_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支