R tidyverse包选取特定的行 select

一. 对行排序

用 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))

整理于: https://zhuanlan.zhihu.com/p/94372177

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容