大多数时间在操作tbl_df对象,而不是data.frame(特别是含有factor的data.frame)。
与magrittr包的管道更好地结合。
更丰富的列操作,例如mutate、select。group_by会节省很多for循环。
filter():过滤列,需要输入一个逻辑向量。xor(x, y):x和y并集除去交集的部分。
between(x, left, right):left <= x <= right。
near(x, y):x和y在一定精度下相等,比==安全)。直接使用列名操作,例如year == 2018。多列操作相当于&。
filter()受group操作影响。
返回一个空的表格,只保留列名,filter(x, FALSE)。
arrange():列排序(默认升序)。多列操作时,先排序第一个,再对第一个相等的排第二个。
desc()降序排列。.by_group = FALSE控制是否需要按照group进行组内操作。
select():选择列,重新组合新的tbl_df。结合tidyselect包的starts_with()前缀、end_with()后缀、contains()部分字符串、matches()正则匹配、num_range类似V01和x02之类、everything()(剩余)所有的列、last_col(offset = n)倒数第n+1列(默认n为0)。select(Col1 = col1)更改col1列名为Col1,并只返回Col1列。
rename(Col1 = col1):返回全部列,但更改列名为Col1。不受group操作影响。setNames(...)不属于dplyr包,但能快速更改所有列命名。
group_by():对某一列/几列为key,分组。
重复行计数:
dat %>%
group_by_all() %>%
count()
mutate():增加列,返回原始对象和增加列,增加列放置最后。transmute():只返回增加的列。受group操作影响。
summerise():聚合列,对某一列或多列进行聚合操作。比如,求均值、方差、极大/小值等。受group操作影响。
filter()、arrange()、mutate()、select()、transmute()、rename()和summerise():
across()选择列:## 选择全部
dat %>%
mutate(across(everything(), mean))
## 条件选择
dat %>%
mutate(across(where(is.numeric), ~ mean(.x, na.rm = TRUE)))
## 位置选择
dat %>%
mutate(across(c(col1, start_with("prefix")), ~ mean(.x, na.rm = TRUE)))
## 混合选择
dat %>%
mutate(across(where(is.character) & start_with("prefix"), ~ mean(.x, na.rm = TRUE)))
across()参数中的.fns操作匿名函数,.x表示对应列。
$依然有效,可以方便取某列或者对某列赋值。可选pull()代替。
coalesce()用于转换NA。
rowwise():指示tbl_df开始按行操作。
sample_n()和sample_frac():随机选择行。
top_n():选择前n行。可以使用负数值,表示倒数n行。
slice(): 根据行号选择。可以选择多行。受group操作影响。
distinct():去除相同的行,也可以制定列。
inner_join(x, y):按照指定的列(可以多列),只返回x和y的共同内容。
left_join(x, y):按照指定的列(可以多列),返回x和y相同内容和剩余x内容(y中没有的用NA替代)。
right_join(x, y):等价于left_join(y, x)。
full_join(x, y):全部x和y内容(没有的用NA代替)。
semi_join(x, y, by):按照指定的列(可以多列),返回x中与y相同的内容。制定列可以写为by = c('col1', 'col2')或者by = c('colx1' = 'coly1', 'colx2' = 'coly2')。
anti_join(x, y):semi_join()后x剩余的内容。
bind_rows(x, y)和bind_cols(x, y):行和列连接。
intersect(x, y)、setdiff(x, y)和union(x, y):对行判断,x和y的交集、x中的余集和并集。
setequal(x, y):x和y的行是否相同(与行顺序无关)。
生成空tibble:tibble(),tibble(colName1 = numeric(), colName2 = character())
rownames_to_column():把行名变成某列。
column_to_rownames():把某列变为行名。
Hadley Wickham, Garrett Grolemund: R for Data Science.
2023年02月16日