数据准备
df <- read.table(file = "D:/Documents/R wd/df.csv", header = T, sep = ",", colClasses = c(year = "character", nitrogen = "character", variety = "character", block = "character")) # 数据导入。
df # 查看数据。复制
## year nitrogen variety block v1 v2 v3 v4
## 1 2020 N1 a 1 1.26 2.14 3.4 4.66
## 2 2020 N1 a 2 1.20 2.90 4.1 5.30
## 3 2020 N1 a 3 1.30 3.00 4.3 5.60
## 4 2020 N1 b 1 1.08 1.72 2.8 3.88
## 5 2020 N1 b 2 1.05 1.65 2.7 3.75
## 6 2020 N1 b 3 1.15 1.35 2.5 3.65
## 7 2020 N2 a 1 1.32 3.78 5.1 6.42
## 8 2020 N2 a 2 1.28 4.32 5.6 6.88
## 9 2020 N2 a 3 1.35 3.95 5.3 6.65
## 10 2020 N2 b 1 1.33 3.47 4.8 6.13
## 11 2020 N2 b 2 1.28 2.72 4.0 5.28
## 12 2020 N2 b 3 1.30 3.90 5.2 6.50
## 13 2021 N1 a 1 1.19 3.61 4.8 5.99
## 14 2021 N1 a 2 1.21 3.29 4.5 5.71
## 15 2021 N1 a 3 1.24 3.26 4.5 5.74
## 16 2021 N1 b 1 1.09 2.71 3.8 4.89
## 17 2021 N1 b 2 1.28 2.32 3.6 4.88
## 18 2021 N1 b 3 1.35 1.95 3.3 4.65
## 19 2021 N2 a 1 1.45 4.35 5.8 7.25
## 20 2021 N2 a 2 1.40 3.80 5.2 6.60
## 21 2021 N2 a 3 1.37 4.23 5.6 6.97
## 22 2021 N2 b 1 1.28 2.72 4.0 5.28
## 23 2021 N2 b 2 1.15 3.35 4.5 5.65
## 24 2021 N2 b 3 1.24 3.46 4.7 5.94复制
5.2.6 将函数应用于矩阵和数据框
R函数的诸多有趣特性之一,就是它们可以应用到一系列的数据对象上,包括标量、向量、矩阵、数组和数据框。
a9 <- 9 # 定义标量a9。
sqrt(a9) # 将函数应用于标量a9。复制
## [1] 3
复制
a10 <- c(1.325, 2.568, 1.529) # 定义向量a10。
round(a10, 2) # 将函数应用于向量。复制
## [1] 1.32 2.57 1.53
复制
a11 <- matrix(runif(18), nrow = 6) # 构建矩阵a11,6行3列的矩阵。
log(a11) # log函数应用于矩阵。复制
## [,1] [,2] [,3]
## [1,] -0.4238173 -0.04241496 -1.2439280
## [2,] -0.3051322 -4.20768597 -2.3511231
## [3,] -2.5665974 -3.48982964 -3.7582963
## [4,] -0.6209383 -0.13111953 -0.1817037
## [5,] -0.7483455 -1.00996403 -3.2715194
## [6,] -1.2067852 -0.48107681 -1.5293161复制
mean(a11) # mean函数应用于矩阵。
复制
## [1] 0.3964861
复制
R中提供了一个apply()函数,可将一个任意函数“应用”到矩阵、数组、数据框的任何维度上。
apply(x, MARGIN, FUN, …, simplify = TRUE) 其中,x为数据对象,可以是数组、矩阵、数据框,数据至少是二维的,MARGIN是维度的下标,MARGIN=1表示行,MARGIN=2表示列。FUN是自定义调用的函数,可为任意R函数,而…则包括了任何想传递给FUN的参数。apply函数只能用于处理矩阵类型的数据,也就是说所有的数据必须是同一类型。因此要使用apply函数的话,需要将数据类型转换成矩阵类型。
a11 # 显示矩阵a11。
复制
## [,1] [,2] [,3]
## [1,] 0.65454348 0.95847197 0.28824975
## [2,] 0.73702591 0.01488076 0.09526212
## [3,] 0.07679641 0.03050607 0.02332344
## [4,] 0.53743991 0.87711292 0.83384840
## [5,] 0.47314872 0.36423208 0.03794872
## [6,] 0.29915746 0.61811744 0.21668381复制
apply(a11, 2, sd) # 计算矩阵a11每列的标准差。
复制
## [1] 0.2422482 0.4092547 0.3045456
复制
apply(a11, 1, mean) # 计算矩阵a11每行的平均值。
复制
## [1] 0.63375507 0.28238960 0.04354197 0.74946708 0.29177651 0.37798624
复制
apply(a11, 1:2, function(x) x+1) # 若将MARGIN设置为1:2,则后面的函数将对每一个单元格进行操作。
复制
## [,1] [,2] [,3]
## [1,] 1.654543 1.958472 1.288250
## [2,] 1.737026 1.014881 1.095262
## [3,] 1.076796 1.030506 1.023323
## [4,] 1.537440 1.877113 1.833848
## [5,] 1.473149 1.364232 1.037949
## [6,] 1.299157 1.618117 1.216684复制
lapply(x, FUN)
lapply函数将函数应用于输入变量x的每一个元素,返回一个与x长度相同的列表。x可以是列表,向量或数据框。
sapply(x, FUN)
x可以是列表,矩阵或数据框,以向量或矩阵形式输出结果。执行的功能与lapply函数相同。
tapply(X, INDEX, FUN = NULL)
tapply用于数据框类型的数据,可以按因子变量分组计算统计量。X可以是数组、矩阵、数据框等分割型数据向量,INDEX是一个或多个因子的列表,每个因子的长度都与x相同,FUN为自定义的调用函数。
lapply(df, mean) # 对数据框df应用lapply函数。会对数据框有数据的列进行函数应用。
复制
## $year
## [1] NA
##
## $nitrogen
## [1] NA
##
## $variety
## [1] NA
##
## $block
## [1] NA
##
## $v1
## [1] 1.25625
##
## $v2
## [1] 3.08125
##
## $v3
## [1] 4.3375
##
## $v4
## [1] 5.59375复制
sapply(df, mean) # 对数据框df应用sapply函数。
复制
## year nitrogen variety block v1 v2 v3 v4
## NA NA NA NA 1.25625 3.08125 4.33750 5.59375复制
tapply(df$v1, df$year, mean) # 求算df数据框v1列的平均值,按照分组year进行计算。
复制
## 2020 2021
## 1.241667 1.270833复制
参考资料:
1. 《R语言实战》(中文版),人民邮电出版社,2013.
2. R语言apply族函数详解,https://blog.csdn.net/wzgl__wh/article/details/52207233
文章转载自ZJH的学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家观点】罗敏:从理论到真实SQL,感受DeepSeek如何做性能优化
墨天轮编辑部
1239次阅读
2025-03-06 16:45:38
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1219次阅读
2025-03-13 11:40:53
2025年2月国产数据库大事记
墨天轮编辑部
956次阅读
2025-03-05 12:27:34
2025年2月国产数据库中标情况一览:GoldenDB 3500+万!达梦近千万!
通讯员
849次阅读
2025-03-06 11:40:20
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
439次阅读
2025-03-13 14:38:19
AI的优化能力,取决于你问问题的能力!
潇湘秦
408次阅读
2025-03-11 11:18:22
优炫数据库成功应用于国家电投集团青海海南州新能源电厂!
优炫软件
335次阅读
2025-03-21 10:34:08
达梦数据与法本信息签署战略合作协议
达梦数据
280次阅读
2025-03-06 09:26:57
国产化+性能王炸!这套国产方案让 3.5T 数据 5 小时“无感搬家”
YMatrix
267次阅读
2025-03-13 09:51:26
IBM收购数据库厂商DataStax:瞄准向量和AI搜索
深度数据云
259次阅读
2025-02-28 12:04:04