| # 2.1.5 列表(List) |
| #列表可以容纳各种类型的数据对象,向量、矩阵、数据框和另一个列表 |
| ### 1.创建 ### |
| list(a,b,c,d) #把四个对象组合成一个list对象 |
| #例: |
| (example = list("abc", 3:5, matrix(1, nrow = 3, ncol = 4), data.frame(x = 1:4, y = paste0("boy_", 1:4)))) |
| ## [[1]] #字符 |
| ## [1] "abc" |
| ## |
| ## [[2]] #数值向量 |
| ## [1] 3 4 5 |
| ## |
| ## [[3]] #矩阵 |
| ## [,1] [,2] [,3] [,4] |
| ## [1,] 1 1 1 1 |
| ## [2,] 1 1 1 1 |
| ## [3,] 1 1 1 1 |
| ## |
| ## [[4]] #数据框 |
| ## x y |
| ## 1 1 boy_1 |
| ## 2 2 boy_2 |
| ## 3 3 boy_3 |
| ## 4 4 boy_4 |
| ### 2.基本操作 ### |
| str()# (一)查看 |
| #例: |
| (complex = list(first = list(1:2), second = list(letters, list(matrix(1:4, nrow = 2, ncol = 2))))) |
| ## $first |
| ## $first[[1]] |
| ## [1] 1 2 |
| ## |
| ## |
| ## $second |
| ## $second[[1]] |
| ## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" |
| ## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z" |
| ## |
| ## $second[[2]] |
| ## $second[[2]][[1]] |
| ## [,1] [,2] |
| ## [1,] 1 3 |
| ## [2,] 2 4 |
| str(complex) |
| ## List of 2 |
| ## $ first :List of 1 |
| ## ..$ : int [1:2] 1 2 |
| ## $ second:List of 2 |
| ## ..$ : chr [1:26] "a" "b" "c" "d" ... |
| ## ..$ :List of 1 |
| ## .. ..$ : int [1:2, 1:2] 1 2 3 4 |
| #(二)引用 |
| # 利用名字引用元素 |
| complex$first |
| ## [[1]] |
| ## [1] 1 2 |
| # 利用序号引用元素 |
| complex[[1]] |
| ## [[1]] |
| ## [1] 1 2 |
| #(三)添加元素 |
| # 利用序号添加元素 |
| complex[[3]] = matrix(1, 2, 3); complex |
| ## $first |
| ## $first[[1]] |
| ## [1] 1 2 |
| ## |
| ## |
| ## $second |
| ## $second[[1]] |
| ## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" |
| ## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z" |
| ## |
| ## $second[[2]] |
| ## $second[[2]][[1]] |
| ## [,1] [,2] |
| ## [1,] 1 3 |
| ## [2,] 2 4 |
| ## |
| ## |
| ## |
| ## [[3]] |
| ## [,1] [,2] [,3] |
| ## [1,] 1 1 1 |
| ## [2,] 1 1 1 |
| # 利用名字添加元素 |
| complex$new = 1:5; complex |
| ## $first |
| ## $first[[1]] |
| ## [1] 1 2 |
| ## |
| ## |
| ## $second |
| ## $second[[1]] |
| ## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" |
| ## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z" |
| ## |
| ## $second[[2]] |
| ## $second[[2]][[1]] |
| ## [,1] [,2] |
| ## [1,] 1 3 |
| ## [2,] 2 4 |
| ## |
| ## |
| ## |
| ## [[3]] |
| ## [,1] [,2] [,3] |
| ## [1,] 1 1 1 |
| ## [2,] 1 1 1 |
| ## |
| ## $new |
| ## [1] 1 2 3 4 5 |
| ### 3.列表中的**ply函数 ### |
| lapply() #对列表中的每个元素实施某种”相同的操作“,如求均值、方差、分位数 |
| sapply() #lapply()是以列表形式输出,sapply()以向量、矩阵形式输出 |
| mapply() #sapply()的多变量版本 |
| tapply(x,f,g) #进行分组统计,需要向量 x (x不可以是数据框),因子或因子列表 f , 函数 g(按照f对x分组,在分组后的向量上运行函数 g) |
| vapply() #与sapply()相似,他可以预先指定的返回值类型 |
| rapply() #递归版本的lapply,它只处理list类型数据 |
| # 老王耗子药的单价,单位(元/袋) |
| (price = list(year2014 = 36:33, year2015 = 32:35, year2016 = 30:27)) |
| ## $year2014 |
| ## [1] 36 35 34 33 |
| ## |
| ## $year2015 |
| ## [1] 32 33 34 35 |
| ## |
| ## $year2016 |
| ## [1] 30 29 28 27 |
| # lapply返回列表(对列表、数据框数据集进行循环,输入为列表,返回值为列表) |
| lapply(price, mean) |
| ## $year2014 |
| ## [1] 34.5 |
| ## |
| ## $year2015 |
| ## [1] 33.5 |
| ## |
| ## $year2016 |
| ## [1] 28.5 |
| lapply(price, sd) |
| ## $year2014 |
| ## [1] 1.290994 |
| ## |
| ## $year2015 |
| ## [1] 1.290994 |
| ## |
| ## $year2016 |
| ## [1] 1.290994 |
| lapply(price, quantile) |
| ## $year2014 |
| ## 0% 25% 50% 75% 100% |
| ## 33.00 33.75 34.50 35.25 36.00 |
| ## |
| ## $year2015 |
| ## 0% 25% 50% 75% 100% |
| ## 32.00 32.75 33.50 34.25 35.00 |
| ## |
| ## $year2016 |
| ## 0% 25% 50% 75% 100% |
| ## 27.00 27.75 28.50 29.25 30.00 |
| # sapply默认返回向量或矩阵(类似于lapply函数,但输入为列表,返回值为向量) |
| sapply(price, mean) |
| ## year2014 year2015 year2016 |
| ## 34.5 33.5 28.5 |
| sapply(price, sd) |
| ## year2014 year2015 year2016 |
| ## 1.290994 1.290994 1.290994 |
| sapply(price, quantile) |
| ## year2014 year2015 year2016 |
| ## 0% 33.00 32.00 27.00 |
| ## 25% 33.75 32.75 27.75 |
| ## 50% 34.50 33.50 28.50 |
| ## 75% 35.25 34.25 29.25 |
| ## 100% 36.00 35.00 30.00 |
| # mapply实现了将price与amount对应元素相乘的效果 |
| (amount = list(year2014 = rep(200, 4), year2015 = rep(100, 4), year2016 = rep(300, 4))) |
| ## $year2014 |
| ## [1] 200 200 200 200 |
| ## |
| ## $year2015 |
| ## [1] 100 100 100 100 |
| ## |
| ## $year2016 |
| ## [1] 300 300 300 300 |
| (income_quarter = mapply("*", price, amount)) |
| ## year2014 year2015 year2016 |
| ## [1,] 7200 3200 9000 |
| ## [2,] 7000 3300 8700 |
| ## [3,] 6800 3400 8400 |
| ## [4,] 6600 3500 8100 |
| # 练习题:总收入(Page89) |
| (income_year = mapply(function(x, y) {sum(x*y)}, price, amount)) |
| ## year2014 year2015 year2016 |
| ## 27600 13400 34200 |
| ### 4.list对象的其他快捷玩法 ### |
| do.call() #告诉list一个函数,然后list里的所有元素来执行这个函数 |
| #例: |
| Sunday1 = data.frame("经度" = rep(39.95, 5), "纬度" = rep(116.3, 5), "地点" = rep("熊孩子玩耍基地", 5)) |
| Sunday2 = data.frame("经度" = rep(39.96, 5), "纬度" = rep(116.4, 5), "地点" = rep("论文生产基地", 5)) |
| Sunday3 = data.frame("经度" = rep(39.97, 5), "纬度" = rep(116.5, 5), "地点" = rep("工业实践基地", 5)) |
| (example = list(Sunday1, Sunday2, Sunday3)) |
| ## [[1]] |
| ## 经度 纬度 地点 |
| ## 1 39.95 116.3 熊孩子玩耍基地 |
| ## 2 39.95 116.3 熊孩子玩耍基地 |
| ## 3 39.95 116.3 熊孩子玩耍基地 |
| ## 4 39.95 116.3 熊孩子玩耍基地 |
| ## 5 39.95 116.3 熊孩子玩耍基地 |
| ## |
| ## [[2]] |
| ## 经度 纬度 地点 |
| ## 1 39.96 116.4 论文生产基地 |
| ## 2 39.96 116.4 论文生产基地 |
| ## 3 39.96 116.4 论文生产基地 |
| ## 4 39.96 116.4 论文生产基地 |
| ## 5 39.96 116.4 论文生产基地 |
| ## |
| ## [[3]] |
| ## 经度 纬度 地点 |
| ## 1 39.97 116.5 工业实践基地 |
| ## 2 39.97 116.5 工业实践基地 |
| ## 3 39.97 116.5 工业实践基地 |
| ## 4 39.97 116.5 工业实践基地 |
| ## 5 39.97 116.5 工业实践基地 |
| do.call(rbind, example) |
| ## 经度 纬度 地点 |
| ## 1 39.95 116.3 熊孩子玩耍基地 |
| ## 2 39.95 116.3 熊孩子玩耍基地 |
| ## 3 39.95 116.3 熊孩子玩耍基地 |
| ## 4 39.95 116.3 熊孩子玩耍基地 |
| ## 5 39.95 116.3 熊孩子玩耍基地 |
| ## 6 39.96 116.4 论文生产基地 |
| ## 7 39.96 116.4 论文生产基地 |
| ## 8 39.96 116.4 论文生产基地 |
| ## 9 39.96 116.4 论文生产基地 |
| ## 10 39.96 116.4 论文生产基地 |
| ## 11 39.97 116.5 工业实践基地 |
| ## 12 39.97 116.5 工业实践基地 |
| ## 13 39.97 116.5 工业实践基地 |
| ## 14 39.97 116.5 工业实践基地 |
| ## 15 39.97 116.5 工业实践基地 |
| #################################################### |
| #总结# |
| list(a,b,c,d) #把四个对象组合成一个list对象 |
| str()# 查看 |
| apply() #对一个数组按行或者按列进行计算 |
| lapply() #对列表中的每个元素实施某种”相同的操作“,如求均值、方差、分位数 |
| sapply() #lapply()是以列表形式输出,sapply()以向量、矩阵形式输出 |
| mapply() #sapply()的多变量版本 |
| tapply(x,f,g) #进行分组统计,需要向量 x (x不可以是数据框),因子或因子列表 f , 函数 g(按照f对x分组,在分组后的向量上运行函数 g) |
| vapply() #与sapply()相似,他可以预先指定的返回值类型 |
| rapply() #递归版本的lapply,它只处理list类型数据 |
| do.call() #告诉list一个函数,然后list里的所有元素来执行这个函数 |
| #################################################### |
R语言-列表
最新推荐文章于 2025-05-31 08:30:00 发布
本文详细介绍了R语言中列表(List)的创建、基本操作及ply函数的应用,如lapply、sapply、mapply等。通过实例展示了如何使用列表存储不同类型数据,以及如何对列表元素进行查看、引用、添加等操作。同时,重点讲解了如何利用ply函数对列表进行统计计算,如计算均值、标准差和分位数。最后,演示了do.call函数将多个数据框拼接成一个大数据框的实用技巧。
953

被折叠的 条评论
为什么被折叠?



