大多数时间在操作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日