程振兴 @czxa.top
截止今天,我已经在本博客上写了607.9k个字了!
本文涵盖了R for Data Science一书第13章(Relational data)到第21章(Iteration)的内容。
关系型数据
1 | library(tidyverse) |
内连接:只保留共同部分
1 | x %>% |
外连接:分为三种类型
- 左连接:以左表为主表;
- 右连接:以右表为主表;
- 全连接:连接的结果会保留两个表的所有观测值。
1 | > x %>% |
重复键值
- 情形一:只有一个表中有重复键值
1 | > x <- tribble( |
- 情形二:两个表中都有重复键值
1 | > x <- tribble( |
定义关键列
如果主表和副表中的key变量的名称不相同,可以使用如下的语句合并:
1 | library(nycflights13) |
merge函数也能实现各种连接:
1 | merge(x, y) # 内连接 |
dplyr | merge |
---|---|
inner_join(x, y) | merge(x, y) |
left_join(x, y) | merge(x, y, all.x = TRUE) |
right_join(x, y) | merge(x, y, all.y = TRUE), |
full_join(x, y) | merge(x, y, all.x = TRUE, all.y = TRUE) |
过滤连接
- semi_join(x, y) 结果只含有完全匹配的观测值。
- anti_join(x, y) 结果只含有在y中匹配不到的观测值。
1 | > x <- tribble( |
设置操作
1 | df1 <- tribble( |
字符串
1 | library(stringr) |
1 | # 不同语言环境的单词排序 |
正则表达式
1 | # 正则表达式 |
锚
1 | # ^ 匹配字符串的开头。 |
字符类和替代方案
1 | # \d:匹配任何数字。 |
重复
1 | # ?:0或1 |
分组和反向引用
1 | # 查找具有重复字母对的所有水果。 |
检查匹配
1 | # 检查匹配 |
替换、分割
1 | # 替换 |
其他类型
1 | str_view(fruit, "nana") |
正则表达式的其它用法
1 | # apropos()可以用于搜索全局环境中可用的所有对象。 |
stringi包
1 | library(stringi) |
因子
默认情况下,ggplot2将删除没有任何值的级别。您可以强制它们显示:
1 | ggplot(gss_cat, aes(race)) + |
因子排序
1 | relig_summary <- gss_cat %>% |
fct_reorder2()通过y与最大值相关联的值重新排序因子x。这使得绘图更容易阅读,因为线条颜色与图例对齐:
1 | gss_cat %>% |
最后,对于条形图,您可以使用fct_infreq()增加频率的顺序:
1 | gss_cat %>% |
修改因子水平
1 | gss_cat %>% count(partyid) |
日期和时间
1 | library(lubridate) |
获取组件
1 | (datetime <- ymd_hms(now())) |
日期的舍入
1 | datetime %>% |
设置组件
1 | datetime |
时间跨度
1 | > age <- today() - ymd(19960624) |
持续时间
1 | dseconds(15) |
时间段
1 | seconds(15) |
管道操作符
1 | library(magrittr) |
向量
1 | set_names(1:3, c("a", "b", "c")) |
map函数
1 | # map() 映射产生列表。 |
base R
1 | # lapply()基本等同于,map() |
映射多个参数
1 | mu <- list(5, 10, -3) |
walk()函数
1 | # 当你想要调用函数的副作用而不是其返回值的时候,walk()函数是个不错的替代方法 |
谓词函数
1 | iris %>% |
reduce()/accumulate()函数
1 | # reduce()函数 |