按行提取子集:选择行、删除行,对行排序。
先创建一个包含重复行的数据框:
set
一. 对行排序
用 dplyr 包中的 arrange() 对行排序,默认是递增。
sw_dup
若要递减排序,套一个 desc():
sw_dup
二. 删除重复行
用 dplyr 包中的 distinct() 删除重复行(只保留第1个,删除其余)。
sw_dup
也可以只根据某些列判定重复:
sw_dup
注:默认只返回选择的列,要返回所有列,需要设置参数 .keep_all=TRUE.
三. 删除包含 NA 的行
用 tidyr 包中的 drop_na() 删除所有包含 NA 的行:
sw_dup
也可以只删除某些列包含 NA 的行:
sw_dup
四. 选择行
- 随机选择若干行
- sample_n(df, m) :随机选择 m 行;
- sample_frac(df, 0.1) :随机选择 10% 的行。
2. 用 filter() 根据值或条件选择行
sw_dup
注:多个条件之间用“,”隔开,相当于 and.
sw_dup
sw_dup
3. 在限定列范围内根据条件选择行
结合变量选择器: vars(), any_vars() (存在), all_vars() (所有)以及类型判断函数 is.numeric(), is.factor() 等,可以在限定列范围内,根据条件选择行。
(1)filter_all(): 在所有这样的列范围内,选择行
选出所有列范围内,存在值包含 "bl" 的行
sw_dup
选出所有列范围内,存在值 >7.5 的行
iris
选出所有列范围内,所有值均 >2.4 的行
iris
(2)filter_if():满足条件的列范围内,选择行
从字符列范围内,选择包含 NA 的行:
sw_dup
(3)filter_at():在某些列范围内,选择行
在包含 "Sepal" 的列范围内,选择存在值 > 4 的行:
iris
参考文献:
- Desi Quintans, Jeff Powell. Working in the Tidyverse. http://www.hiercourse.com/
- SuZan. Data Wrangling Part 3: Basic and more advanced ways to filter rows. https://suzan.rbind.io/2018/02/dplyr-tutorial-3/
- Garrett Grolemund, Hadley Wickham. R for Data Science. https://r4ds.had.co.nz/
____________________________________
转载请注明,禁止用于出版。