一. 对行排序
用 dplyr 包中的 arrange() 对行排序,默认是递增。
sw_dup%>%arrange(name,gender)
若要递减排序,套一个 desc():
sw_dup%>%arrange(desc(mass))#递减排序
二. 删除重复行
用 dplyr 包中的 distinct() 删除重复行(只保留第1个,删除其余)。
sw_dup%>%distinct()%>%glimpse()%>%anyDuplicated()#查看重复行数
也可以只根据某些列判定重复:
sw_dup%>%distinct(species,homeworld)%>%#只根据species和homeworld判定重复glimpse()%>%anyDuplicated()
三. 删除包含 NA 的行
用 tidyr 包中的 drop_na() 删除所有包含 NA 的行:
sw_dup%>%drop_na()%>%glimpse()%>%anyNA()
也可以只删除某些列包含 NA 的行:
sw_dup%>%drop_na(gender:species)%>%glimpse()%>%anyNA()
四. 选择行
随机选择若干行
sample_n(df, m) :随机选择 m 行;
sample_frac(df, 0.1) :随机选择 10% 的行。
2. 用 filter() 根据值或条件选择行
sw_dup%>%filter(species=="Human",homeworld!="Earth")
注:多个条件之间用“,”隔开,相当于 and.
sw_dup%>%filter(species=="Human",(is.na(mass)|height>180))
sw_dup%>%filter(between(height,100,170))
3. 在限定列范围内根据条件选择行
结合变量选择器: vars(), any_vars() (存在), all_vars() (所有)以及类型判断函数 is.numeric(), is.factor() 等,可以在限定列范围内,根据条件选择行。
(1)filter_all(): 在所有这样的列范围内,选择行
选出所有列范围内,存在值包含 "bl" 的行
sw_dup%>%filter_all(any_vars(str_detect(.,pattern="bl")))
选出所有列范围内,存在值 >7.5 的行
iris[,1:4]%>%as_tibble()%>%filter_all(any_vars(.>7.5))
选出所有列范围内,所有值均 >2.4 的行
iris[,1:4]%>%as_tibble()%>%filter_all(all_vars(.>2.4))
(2)filter_if():满足条件的列范围内,选择行
从字符列范围内,选择包含 NA 的行:
sw_dup%>%filter_if(is.character,any_vars(is.na(.)))
(3)filter_at():在某些列范围内,选择行
在包含 "Sepal" 的列范围内,选择存在值 > 4 的行:
iris[,1:4]%>%as_tibble()%>%filter_at(vars(contains("Sepal")),all_vars(.>4))