ddply和aggregate是两个用来整合数据的功能强大的函数。

  aggregate(x, ...)

  关于aggregate()函数的使用在《R语言实战》中P105有简单描述,这里重新说一下。此函数主要有一下几种用法:
  

  1. ## Default S3 method:
  2.   aggregate(x, ...)
  3.  
  4.   ## S3 method for class 'data.frame'
  5.   aggregate(x, by, FUN, ..., simplify = TRUE, drop = TRUE)
  6.  
  7.   ## S3 method for class 'formula'
  8.   aggregate(formula, data, FUN, ...,subset, na.action = na.omit)
  9.  
  10.   ## S3 method for class 'ts'
  11.   aggregate(x, nfrequency = 1, FUN = sum, ndeltat = 1,ts.eps = getOption("ts.eps"), ...)

例:    

  1. attach(mtcars)
  2. aggdata <-aggregate(mtcars, by=list(cyl,gear), FUN=mean, na.rm=TRUE)
  3. aggdata
  4. Group.1 Group.2 mpg cyl disp hp drat wt qsec vs am gear carb
  5. 1 4 3 21.500 4 120.1000 97.0000 3.700000 2.465000 20.0100 1.0 0.00 3 1.000000
  6. 2 6 3 19.750 6 241.5000 107.5000 2.920000 3.337500 19.8300 1.0 0.00 3 1.000000
  7. 3 8 3 15.050 8 357.6167 194.1667 3.120833 4.104083 17.1425 0.0 0.00 3 3.083333
  8. 4 4 4 26.925 4 102.6250 76.0000 4.110000 2.378125 19.6125 1.0 0.75 4 1.500000
  9. 5 6 4 19.750 6 163.8000 116.5000 3.910000 3.093750 17.6700 0.5 0.50 4 4.000000
  10. 6 4 5 28.200 4 107.7000 102.0000 4.100000 1.826500 16.8000 0.5 1.00 5 2.000000
  11. 7 6 5 19.700 6 145.0000 175.0000 3.620000 2.770000 15.5000 0.0 1.00 5 6.000000
  12. 8 8 5 15.400 8 326.0000 299.5000 3.880000 3.370000 14.5500 0.0 1.00 5 6.000000

  得到数据框aggdata,其中的Group.1和Group.2的列名可以指定,只需第二行写成:

  1. aggdata <-aggregate(mtcars, by=list(Group.cyl=cyl, Group.gears=gear),FUN=mean, na.rm=TRUE)

即可。

  注意:在使用aggregate()函数的时候, by中的变量必须在一个列表中(即使只有一个变量) 。 指定的函数FUN可为任意的内建或自编函数 。

  其他的一些例子:  

  1. ## Compute the averages for the variables in 'state.x77', grouped
  2. ## according to the region (Northeast, South, North Central, West) that
  3. ## each state belongs to.
  4. aggregate(state.x77, list(Region = state.region), mean)
  5. ## Compute the averages according to region and the occurrence of more
  6. ## than 130 days of frost.
  7. aggregate(state.x77,
  8. list(Region = state.region,Cold = state.x77[,"Frost"] > 130),
  9. mean)
  10. ## (Note that no state in 'South' is THAT cold.)
  11. ## example with character variables and NAs
  12. testDF <- data.frame(v1 = c(1,3,5,7,8,3,5,NA,4,5,7,9),
  13. v2 = c(11,33,55,77,88,33,55,NA,44,55,77,99) )
  14. by1 <- c("red", "blue", 1, 2, NA, "big", 1, 2, "red", 1, NA, 12)
  15. by2 <- c("wet", "dry", 99, 95, NA, "damp", 95, 99, "red", 99, NA, NA)
  16. aggregate(x = testDF, by = list(by1, by2), FUN = "mean")
  17. # and if you want to treat NAs as a group
  18. fby1 <- factor(by1, exclude = "")
  19. fby2 <- factor(by2, exclude = "")
  20. aggregate(x = testDF, by = list(fby1, fby2), FUN = "mean")
  21. ## Formulas, one ~ one, one ~ many, many ~ one, and many ~ many:
  22. aggregate(weight ~ feed, data = chickwts, mean)
  23. aggregate(breaks ~ wool + tension, data = warpbreaks, mean)
  24. aggregate(cbind(Ozone, Temp) ~ Month, data = airquality, mean)
  25. aggregate(cbind(ncases, ncontrols) ~ alcgp + tobgp, data = esoph, sum)
  26. ## Dot notation:
  27. aggregate(. ~ Species, data = iris, mean)
  28. aggregate(len ~ ., data = ToothGrowth, mean)
  29. ## Often followed by xtabs():
  30. ag <- aggregate(len ~ ., data = ToothGrowth, mean)
  31. xtabs(len ~ ., data = ag)
  32. ## Compute the average annual approval ratings for American presidents.
  33. aggregate(presidents, nfrequency = 1, FUN = mean)
  34. ## Give the summer less weight.
  35. aggregate(presidents, nfrequency = 1,
  36. FUN = weighted.mean, w = c(1, 1, 0.5, 1))

  ddply

  下面是ddply函数的一般用法:

  1. ddply(.data, .variables, .fun = NULL, ..., .progress = "none",.inform = FALSE, .drop = TRUE, .parallel = FALSE, .paropts = NULL)

  例:

  1. # Summarize a dataset by two variables
  2. dfx <- data.frame(
  3. group = c(rep('A', 8), rep('B', 15), rep('C', 6)),
  4. sex = sample(c("M", "F"), size = 29, replace = TRUE),
  5. age = runif(n = 29, min = 18, max = 54)
  6. )
  7. head(dfx)
  8. group sex age
  9. 1 A M 22.44750
  10. 2 A M 52.92616
  11. 3 A F 30.00443
  12. 4 A M 39.56907
  13. 5 A M 18.89180
  14. 6 A F 50.81139
  15. #Note the use of the '.' function to allow
  16. # group and sex to be used without quoting
  17. ddply(dfx, .(group, sex), summarize,mean = round(mean(age), 2),sd = round(sd(age), 2))
  18. group sex mean sd
  19. 1 A F 40.41 14.71
  20. 2 A M 30.35 13.17
  21. 3 B F 34.81 12.76
  22. 4 B M 34.04 13.36
  23. 5 C F 35.09 13.39
  24. 6 C M 28.53 4.57
  25. # An example using a formula for .variables
  26. ddply(baseball[1:100,], ~ year, nrow)
  27. year V1
  28. 1 1871 7
  29. 2 1872 13
  30. 3 1873 13
  31. 4 1874 15
  32. 5 1875 17
  33. 6 1876 15
  34. 7 1877 17
  35. 8 1878 3
  36. # Applying two functions; nrow and ncol
  37. ddply(baseball, .(lg), c("nrow", "ncol"))
  38. lg nrow ncol
  39. 1 65 22
  40. 2 AA 171 22
  41. 3 AL 10007 22
  42. 4 FL 37 22
  43. 5 NL 11378 22
  44. 6 PL 32 22
  45. 7 UA 9 22
  46. # Calculate mean runs batted in for each year
  47. rbi <- ddply(baseball, .(year), summarise,mean_rbi = mean(rbi, na.rm = TRUE))
  48. head(rbi)
  49. year mean_rbi
  50. 1 1871 22.28571
  51. 2 1872 20.53846
  52. 3 1873 30.92308
  53. 4 1874 29.00000
  54. 5 1875 31.58824
  55. 6 1876 30.13333
  56. # Plot a line chart of the result
  57. plot(mean_rbi ~ year, type = "l", data = rbi)
  58. # make new variable career_year based on the
  59. # start year for each player (id)
  60. base2 <- ddply(baseball, .(id), mutate,career_year = year - min(year) + 1)
  61. head(base2)
  1. id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp career_year
  2. 1 aaronha01 1954 1 ML1 NL 122 468 58 131 27 6 13 69 2 2 28 39 NA 3 6 4 13 1
  3. 2 aaronha01 1955 1 ML1 NL 153 602 105 189 37 9 27 106 3 1 49 61 5 3 7 4 20 2
  4. 3 aaronha01 1956 1 ML1 NL 153 609 106 200 34 14 26 92 2 4 37 54 6 2 5 7 21 3
  5. 4 aaronha01 1957 1 ML1 NL 151 615 118 198 27 6 44 132 1 1 57 58 15 0 0 3 13 4
  6. 5 aaronha01 1958 1 ML1 NL 153 601 109 196 34 4 30 95 4 1 59 49 16 1 0 3 21 5
  7. 6 aaronha01 1959 1 ML1 NL 154 629 116 223 46 7 39 123 8 0 51 54 17 4 0 9 19 6

R语言利器之ddply和aggregate的更多相关文章

  1. 【R笔记】R语言利器之ddply

    ddply()函数位于plyr包,用于对data.frame进行分组统计,与tapply有些类似 准备数据 # 使用stringsAsFactors=F来防止data.frame把向量转为factor ...

  2. R语言函数总结(转)

    R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字符不允许是数字. 基本命令要么是表达 ...

  3. 【R笔记】R语言函数总结

    R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头,第二个字 ...

  4. R语言笔记完整版

    [R笔记]R语言函数总结   R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头, ...

  5. 【转】R语言函数总结

    原博: R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头,并且如果以 . 开头, ...

  6. R语言学习 第九篇:plyr包

    在数据分析中,整理数据的本质可以归纳为:对数据进行分割(Split),然后应用(Apply)某些处理函数,最后将结果重新组合(Combine)成所需的格式返回,简单描述为:Split - Apply ...

  7. 【R】R语言常用函数

    R语言常用函数 基本 一.数据管理vector:向量 numeric:数值型向量 logical:逻辑型向量character:字符型向量 list:列表 data.frame:数据框c:连接为向量或 ...

  8. php调试利器之phpdbg

    信海龙的博客 php调试利器之phpdbg 简介 PHPDBG是一个PHP的SAPI模块,可以在不用修改代码和不影响性能的情况下控制PHP的运行环境. PHPDBG的目标是成为一个轻量级.强大.易用的 ...

  9. R语言进阶之4:数据整形(reshape)

    一.通过重新构建数据进行整形 数据整形最直接的思路就把数据全部向量化,然后按要求用向量构建其他类型的数据.这样是不是会产生大量的中间变量.占用大量内存?没错.R语言的任何函数(包括赋值)操作都会有同样 ...

随机推荐

  1. 简单几步让Chrome浏览器也能打开Oracle EBS

    2016-12-14更新: Google Chrome浏览器从版本45开始正式禁用NPAPI插件(也就是原本JRE插件的实现架构).所以如果你的浏览器版本已经是45以上了,本文提供的方法将不再适用.以 ...

  2. Android Java类编写规范+优化建议

    本文仅是我个人在实际开发中习惯的编写方式,当然这种方式也是来自很多官方的推荐,所以在一定程度上是可以被模仿套用的.本文将不定期更新~ 零.指导原则 优先保证可读性,不要过分追求代码艺术和效率 在可读性 ...

  3. Effective Java 24 Eliminate unchecked warnings

    Note Eliminate every unchecked warning that you can. Set<Lark> exaltation = new HashSet(); The ...

  4. Effective Java 75 Consider using a custom serialized form

    Principle Do not accept the default serialized form without first considering whether it is appropri ...

  5. 第八章 了解tempdb数据库

    1.一个sqlserver数据库实例上只能有一个tempdb数据库,这个实例上所有的用户都共享这个数据库.2.tempdb数据库在每次sqlserver重启后都会重新创建,所以数据会丢失.3.因为te ...

  6. nginx入门(安装,启动,关闭,信号量控制)

    公司使用到了nginx,于是周末初步接触了一下nginx,立即被其简洁,优雅,高效的特性给迷住了.nginx是在是个好东西,配置极其简单,容易理解,极其高效,稍微一调优,ab测试10k并发,很轻松.比 ...

  7. 深入PHP内核之面向对象总结

    很久以前看过的,今天总结一下 一.PHP中创建一个类 在PHP中创建一个简单的类是这样的: <?php $obj = new test($url) ?> 二.zend_class_entr ...

  8. Core Data初试

    CoreDataStack.swift import CoreData class CoreDataStack: NSObject { let context: NSManagedObjectCont ...

  9. PHP笔记(PHP高级篇)

    高级篇中将涉及数据库的使用以及Cookie和Session会话,提高PHP的开发效率和运行效率 PHP程序员需要掌握的MySQL操作 为项目设计表 使用SQL语句 MySQL的目录结构 data目录中 ...

  10. 一个不错的shell 脚本教程 入门级

    一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂     建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行s ...