• 44.2.1 cppFunction() 转换简单的C++函数—Fibnacci例子
  • 44.2.2 sourceCpp() 转换C++程序—正负交替迭代例子
  • 44.2.3 sourceCpp() 转换C++源文件中的程序—正负交替迭代例子
  • 44.2.4 sourceCpp() 转换C++源程序文件—卷积例子
  • 44.2.5 在Rmd文件中使用C++源程序文件
  • 45 R与C++的类型转换
  • 45.1 wrap() 把C++变量返回到R中
  • 45.2 as() 函数把R变量转换为C++类型
  • 45.3 as() wrap() 的隐含调用
  • 46 Rcpp 属性
  • 46.1 Rcpp属性介绍
  • 46.2 在C++源程序中指定要导出的C++函数
  • 46.3 在R中编译链接C++代码
  • 46.4 Rcpp属性的其它功能
  • 46.4.1 自变量有缺省值的函数
  • 46.4.2 允许用户中断
  • 46.4.3 把R代码写在C++源文件中
  • 46.4.4 在C++中调用R的随机数发生器
  • 47 Rcpp提供的C++数据类型
  • 47.1 RObject类
  • 47.2 IntegerVector类
  • 47.2.1 IntegerVector示例1:返回完全数
  • 47.2.2 IntegerVector示例2:输入整数向量
  • 47.3 NumericVector类
  • 47.3.1 示例1:计算元素 \(p\) 次方的和
  • 47.3.2 示例2: clone 函数
  • 47.3.3 示例3:向量子集
  • 47.4 NumericMatrix类
  • 47.4.1 示例1:计算矩阵各列模的最大值
  • 47.4.2 示例2:把输入矩阵制作副本计算元素平方根
  • 47.4.3 示例3:访问列子集
  • 47.5 Rcpp的其它向量类
  • 47.5.1 Rcpp的LogicalVector类
  • 47.5.2 Rcpp的CharacterVector类型
  • 47.6 Rcpp提供的其它数据类型
  • 47.6.1 Named类型
  • 47.6.2 List类型
  • 47.6.3 Rcpp的DataFrame类
  • 47.6.4 Rcpp的Function类
  • 47.6.5 Rcpp的Environment类
  • 48 Rcpp糖
  • 48.1 简单示例
  • 48.2 向量化的运算符
  • 48.2.1 向量化的四则运算
  • 48.2.2 向量化的二元逻辑运算
  • 48.2.3 向量化的一元运算符
  • 48.3 用Rcpp访问数学函数
  • 48.4 返回单一逻辑值的函数
  • 48.5 返回糖表达式的函数
  • 48.6 R与Rcpp不同语法示例
  • 49 用Rcpp帮助制作R扩展包
  • 49.1 不用扩展包共享C++代码的方法
  • 49.2 生成扩展包
  • 49.2.1 利用已有基于Rcpp属性的源程序制作扩展包
  • 49.2.2 DESCRIPTION文件
  • 49.2.3 NAMESPACE文件
  • 49.3 重新编译
  • 49.4 建立C++用的接口界面
  • 50 R编程例子
  • 50.1 R语言
  • 50.1.1 用向量作逆变换
  • 50.1.2 斐波那契数列计算
  • 50.1.3 穷举所有排列
  • 50.1.4 可重复分组方式穷举
  • 50.1.5 升降连计数
  • 50.1.6 高斯八皇后问题
  • 50.2 概率
  • 50.2.1 智者千虑必有一失
  • 50.2.2 圆桌夫妇座位问题
  • 50.3 科学计算
  • 50.3.1 城市间最短路径
  • 50.3.2 Daubechies小波函数计算
  • 50.3.3 房间加热温度变化
  • 50.4 统计计算
  • 50.4.1 线性回归实例
  • 50.4.2 核回归与核密度估计
  • 50.4.3 二维随机模拟积分
  • 50.4.4 潜周期估计
  • 50.4.5 ARMA(1,1)模型估计
  • 50.4.6 VAR模型平稳性
  • 50.4.7 贮存可靠性评估
  • 50.5 数据处理
  • 50.5.1 小题分题型分数汇总
  • 50.5.2 类别编号重排
  • 50.6 文本处理
  • 50.6.1 用R语言下载处理《红楼梦》htm文件
  • 51 使用经验
  • 51.1 文件管理
  • 51.1.1 文件备份
  • 51.1.2 工作空间
  • 51.2 程序格式
  • A R Markdown文件格式
  • A.1 R Markdown文件
  • A.2 R Markdown文件的编译
  • A.2.1 编译的实际过程
  • A.3 在R Markdown文件中插入R代码
  • A.4 [1] -0.63 0.18 -0.84 1.60 0.33 -0.82 0.49 0.74 0.58 -0.31
  • A.5 输出表格
  • A.6 Estimate Std. Error t value Pr(>|t|)
  • A.7 (Intercept) -22 5.5497748 -3.964125 4.152962e-03
  • A.8 x 11 0.8944272 12.298374 1.777539e-06
  • A.9 利用R程序插图
  • A.10 冗余输出控制
  • A.11 代码段选项
  • A.11.1 代码和文本输出结果格式
  • A.12 [1] 3413
  • A.13 [1] 1 2 3 4 5
  • A.14 [1] 1
  • A.15 [1] 5
  • A.16 [1] 32
  • A.17 [1] 288
  • A.18 [1] 3413
  • A.19 [1] 1
  • A.20 [1] 6.123032e-17
  • A.21 [1] 1
  • A.22 [1] 6.123032e-17
  • A.23 [1] 1
  • A.24 [1] 6.123032e-17
  • A.25 [1] 123456789001 123456789002 123456789003 123456789004 123456789005
  • A.26 [6] 123456789006 123456789007 123456789008 123456789009 123456789010
  • A.27 [11] 123456789011 123456789012 123456789013 123456789014 123456789015
  • A.28 [16] 123456789016 123456789017 123456789018 123456789019 123456789020
  • A.28.1 图形选项
  • A.28.2 缓存(cache)选项
  • A.29 章节目录链接问题
  • A.29.1 第三章第一节标题
  • A.30 其它编程语言引擎
  • A.31 交互内容
  • A.32 属性设置
  • A.32.1 YAML元数据
  • A.32.2 输出格式
  • A.32.3 输出格式设置
  • A.32.4 目录设置
  • A.32.5 章节自动编号
  • A.32.6 Word输出章节自动编号及模板功能
  • A.32.7 HTML特有输出格式设置
  • A.32.8 关于数学公式支持的设置
  • A.32.9 输出设置文件
  • A.33 LaTeX和PDF输出
  • A.33.1 TinyTex的安装使用
  • A.34 tlmgr.pl: package repository
  • A.35 http://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet (verified)
  • A.36 doublestroke:
  • A.37 texmf-dist/tex/latex/doublestroke/dsfont.stytlmgr search –file –global “dsfont.sty”
  • A.38 tlmgr install doublestroke
  • A.39 tlmgr.pl: package repository
  • A.40 http://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet (verified)
  • A.41 [1/1, ??:??/??:??] install: doublestroke [66k]
  • A.42 running mktexlsr …
  • A.43 done running mktexlsr.
  • A.44 running updmap-sys …
  • A.45 done running updmap-sys.
  • A.46 tlmgr.pl: package log updated:
  • A.47 C:/Users/user/AppData/Roaming/TinyTeX/texmf-var/web2c/tlmgr.log
  • A.47.1 Rmd中Latex设置
  • A.48 生成期刊文章
  • A.49 附录:经验与问题
  • A.49.1 Word模板制作
  • A.49.2 数学公式设置补充
  • B 用bookdown制作图书
  • B.1 介绍
  • B.2 一本书的设置
  • B.3 章节结构
  • B.4 书的编译
  • B.5 交叉引用
  • B.6 数学公式和公式编号
  • B.7 定理类编号
  • B.8 文献引用
  • B.9 插图
  • B.10 表格
  • B.10.1 Markdown表格
  • B.10.2 kable() 函数制作表格
  • B.10.3 R中其它制作表格的包
  • B.11 数学公式的设置
  • B.12 使用经验
  • B.12.1 学位论文
  • B.12.2 LaTeX
  • B.12.3 算法
  • B.12.4 中文乱码
  • B.12.5 图片格式
  • B.12.6 其它经验
  • B.13 bookdown的一些使用问题
  • C 用R Markdown制作简易网站
  • C.1 介绍
  • C.2 简易网站制作
  • C.2.1 网站结构
  • C.2.2 编译
  • C.2.3 内容文件
  • C.2.4 网站设置
  • C.3 用blogdown制作网站
  • C.3.1 生成新网站的框架
  • C.3.2 网页内容文件及其设置
  • C.3.3 初学者的工作流程
  • C.3.4 网站设置文件
  • C.3.5 静态文件
  • D 制作幻灯片
  • D.1 介绍
  • D.2 Slidy幻灯片
  • D.2.1 文件格式
  • D.2.2 幻灯片编译
  • D.2.3 播放控制
  • D.2.4 生成单页HTML
  • D.2.5 数学公式处理与输出设置文件
  • D.2.6 其它选项
  • D.2.7 slidy幻灯片激光笔失效问题的修改
  • D.3 MS PowerPoint幻灯片
  • D.4 Bearmer幻灯片格式
  • D.5 R Presentation格式
  • References
  • 编著:李东风
  • 有34个肺癌病人的数据:

    数据汇总问题更常见的是作分组汇总。 dplyr包的 group_by() 函数对数据框(或tibble)分组, 随后的 summarise() 将按照分组汇总。 group_by() 对数据框增加分组信息, 使得后续的管道操作针对每一组内进行操作, 但 group_by() 并不修改数据框内容。

    24.3.1 简单汇总

    按不同性别分组计算人数与年龄平均值:

    Programming with dplyr 。 在自定义函数中使用tidyr功能, 可参考 programming with tidyr

    24.6 tibble中的列表列

    24.6.1 nest unnest

    dplyr包的 group_by summarise summarise_at 等函数配合, 可以对数据框分组计算各种概括统计量。

    但是,如果分组以后希望进行更复杂的统计分析, 比如分组回归建模, summarise 就不够用了。 可以用基本R的 split 函数将数据框按某个分类变量拆分为子数据框的列表, 然后用purrr包的map类函数分类建模, 最终将各个模型的结果合并为一个数据框。

    上面的办法虽然可行, 但是管理不够方便。 tidyr包(属于tidyverse系列,载入tidyverse时会自动载入)提供了 nest unnest 函数, 可以将子数据框保存在tibble中, 可以将保存在tibble中的子数据框合并为一个大数据框。 tibble允许存在数据类型是列表(list)的列, 子数据框就是以列表数据类型保存在tibble的一列中的。

    24.6.2 group_by nest 配合

    对数据框用 group_by 分组后调用 nest 函数就可以生成每个组的子数据框。

    将d.cancer数据框按 type 分类拆分为2个子数据框, 存入tibble的data列中:

    summarise 等函数如果将结果用 list() 声明, 汇总结果就可以保存为列表类型的列, 结果可以包含多个值, unnest 可以将结果恢复成正常的数据框,

    unnest()第一自变量为管道输入的数据框, 第二自变量cols可以用如下格式:

  • 单个变量名,不需要写成字符串形式;
  • 多个变量名,写成c(x, y, z)这样的格式,不需要写成字符型向量;
  • 保存在字符型向量中的变量名,用one_of(vnames)格式, 其中vnames是保存了要释放的列名的字符型向量的变量名; 也可以写成one_of(c("x", "y", "z"))这样的格式。
  • 24.6.5 直接生成列表类型的列

    也可以直接生成列表类型的列, 符合条件时可以用unnest()合并为大数据框。

    一个完整的数据分析过程, 经常需要反复地修改程序, 更新数据。 如果每次都重新运行整个的数据整理、概括、建模、结果呈现的代码, 会花费很多时间, 中间某一步骤出错时如果修改程序重新运行, 就使得前面步骤白作, 如果人为控制重新运行哪些代码, 容易犯错使得利用了旧的结果。

    解决这样的问题的工具是make类的软件, 这些软件规定各个任务之间的依赖关系, 当任务依赖的数据和代码更新时自动管理需要重新运行哪些程序。 R提供了targets包可以实现这样的任务管理功能, 规定了数据、代码、结果的依赖关系后可以仅运行受到影响的部分。

    https://docs.ropensci.org/targets/

    24.8 基本R的汇总功能

    24.8.1 summary()函数

    对数值型向量x,用summary(x)可以获得变量的平均值、中位数、 最小值、最大值、四分之一和四分之三分位数。 如

    对连续取值的变量x, 可以用mean, std, var, sum, prod, min, max等函数获取基本统计量。 加na.rm=TRUE选项可以仅对非缺失值计算。

    sort(x)返回排序后的结果。 rev(x)x所有元素次序颠倒后返回。 quantile(x, c(0.05, 0.95))可以求x的样本分位数。 rank(x)x求秩得分(即名次,但从最小到最大排列)。

    24.8.3 分类变量概括

    分类变量一般输入为因子。 对因子或其它向量xtable(x)返回x的每个不同值的频率(出现次数), 结果为一个类(class)为table的一维数组。 每个元素有对应的元素名,为x的各水平值。

    colMeans() 对数据框或矩阵的每列计算均值, 用 colSums() 对数据框或矩阵的每列计算总和。 用 rowMeans() rowSums() 对矩阵的每行计算均值或总和。

    数据框与矩阵有区别, 某些适用于矩阵的计算对数据框不适用, 例如矩阵乘法。 用 as.matrix() 把数据框的数值子集转换成矩阵。

    对矩阵,用 apply(x, 1, FUN) 对矩阵x的每一行使用函数FUN计算结果, 用 apply(x, 2, FUN) 对矩阵x的每一列使用函数FUN计算结果。

    如果 apply(x,1,FUN) 中的FUN对每个行变量得到多个 \(m\) 结果, 结果将是一个矩阵,行数为 \(m\) ,列数等于nrow(x)。 如果 apply(x,2,FUN) 中的FUN对每个列变量得到多个 \(m\) 结果, 结果将是一个矩阵,行数为 \(m\) ,列数等于ncol(x)。

    24.9.1 tapply() 分组汇总

    tapply() 函数进行分组概括, 格式为:

    aggregate 函数对输入的数据框用指定的分组变量(或交叉分组) 分组进行概括统计。 例如,下面的程序按性别分组计算年龄、疗前体积、疗后体积的平均值:

    split函数可以把数据框的各行按照一个或几个分组变量分为子集的列表, 然后可以用 sapply() vapply() 对每组进行概括。

    plyr是一个专注于分组后分别分析然后将分析结果尽可能合理地合并的扩展包, 功能强大, dplyr包仅针对数据框,使用更方便,但是对于复杂情况功能不如plyr包强。 plyr包已经被dplyr、purrr包代替,不再继续开发新版本。 这部分内容仅作为备忘, 读者可以跳过。

    plyr的输入支持数组、数据框、列表, 输出支持数组、数据框、列表或无输出。 分组分析的函数输出格式需要与指定的输出格式一致。

    这里主要介绍从数据框分组概括并将结果保存为数据框的方法, 使用plyr包的 ddply() 函数。 实际上,dplyr包的这种功能更方便。 plyr包的优点是可以自定义概括函数, 使得结果表格符合用户的预期, 处理多个变量时程序更简洁。

    plyr包与dplyr包的函数名冲突比较大, 所以需要先卸载dplyr包再调用plyr包:

  • patients.csv 读入“d.patients”中, 并计算发病年龄、发病年、发病月、 发病年月(格式如“200702”表示2007年2月份)。

  • 把“现住地址国标”作为字符型,去掉最后两位,仅保留前6位数字, 保存到变量“地址编码”中。

  • 按照地址编码和发病年月交叉分类汇总发病人数, 保存到数据框d.pas1中, 然后保存为CSV文件“分区分年月统计.csv”中。 要求结果有三列:“地址编码”、“发病年月”、“发病人数”。

  • 按照地址编码和发病月分类汇总发病人数, 保存到数据框d.pas2中, 然后保存为CSV文件“分区分月统计.csv”中。 要求每个地址编码占一行, 各列为地址编码以及1、2、…………、12各月份, 每行为同一地址编码各月份的发病数。

  • 按发病年月和性别汇总发病人数, 并计算同年月不分性别的发病总人数。 结果保存到数据框d.pas3中, 然后保存到CSV文件“分年月分性别统计.csv”中。 要求每个不同年月占一行, 变量包括年月、男性发病数、女性发病数、总计。

  • 分析病人的职业分布,保存到数据框d.pas4中, 然后保存到CSV文件“职业构成.csv”中。 要求各列为职业、发病人数、百分比(结果乘以100并保留一位小数)。

  • 把年龄分成0—9, 11—19, ……, 70以上各段, 保存为“年龄段”变量。 用年龄段和性别交叉汇总发病人数和百分比(结果乘以100并保留一位小数), 保存到“年龄性别分布.csv”中。 要求将每个年龄段的男性发病人数、发病率、女性发病人数、发病率存为一行。

  •