dplyr包之实用总结之列选择及处理技巧
Posted cobby-baby
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dplyr包之实用总结之列选择及处理技巧相关的知识,希望对你有一定的参考价值。
dplyr包实用总结之列选择及处理技巧
select()
-
secect方法内添加列的名称即可,添加顺序决定output顺序。如果只是调整列的顺序,可在选择列后,使用everything(),添加剩余所有的列。
msleep %>% select(conservation, sleep_total, everything()) %>% glimpse
-
select()可以在选择列的时候直接对列名进行重命名,但在保留所有的列时又要改名,要使用rename()。
msleep %>% select(animal = name, sleep_total, extinction_threat = conservation) %>% glimpse ###rename msleep %>% rename(animal = name, extinction_threat = conservation) %>% glimpse
-
添加多列可以使用 : (start_col:end_cols)来提高效率,如果选择几个部分的列,列之间有间隔,你可以取消选择不用的列,用,号分隔后继续选择想要的列。
在取消列时,依然可以使用减号-进行操作。
###glimpse,可以快速查看选择输出的列,而不用输出显示所有的列,建议常使用 msleep %>% select(name:order, sleep_total:sleep_cycle) %>% glimpse ###取消某些列 msleep %>% select(-conservation, -(sleep_total:awake)) %>% glimpse ###可以全部取消,在选择想要列,例子中,conservation包含在name:awake区间 msleep %>% select(-(name:awake), conservation) %>% glimpse
-
根据列的特点选择特定的列,如列名的开头starts_with()、结尾ends_with()、包含字符串contains()、正则匹配matches()、预先设定的列名one_of()来选择。
###避免连续重新输入列名:one_of()。 您可以预先设置列名,然后在select()语句中通过将它们包装在one_of()中或使用!!运算符来引用它们。 classification <- c("name", "genus", "vore", "order", "conservation") msleep %>% select(!!classification)
select_if()
-
select_if() 根据条件选择,select_if()允许传递返回逻辑语句的函数is.numeric,is.character,is.integer,is.double,is.logical,is.factor,你有日期列,你可以加载lubridate包,并使用is.POSIXt或is.Date
my_data %>% select_if(is.numeric)
select_if()可以选择否定,但此时需要添加波型符号将函数传递给seclect_if(), 实际上就是select_if()、select_all()、select_at() 将内部的函数(将添加了否定符号整体作为一个函数)当做参数来传递。如果你必须添加任何否定或者参数,你可以将其包装在funs(),也可以创建自定义的函数。
select_if
可以根据任何逻辑函数进行选择,而不仅仅基于数据类型。如选择平均值大于100所有的列。但要注意选择是数字类型的列,在使用均值函数mean时,mean()>100本身不是一个函数,应该添加波浪号或者包装在funs()中,将语句转为函数。###分步骤 msleep %>% select_if(is.numeric) %>% select_if(~mean(., na.rm=TRUE) > 100) ###整合在一起 msleep %>% select_if(~is.numeric(.) & mean(., na.rm=TRUE) > 10)
select_if() 还有一个比较常用的功能就是和n_distinct()一起使用,筛选出不同列中包含不同值的数量,同样n_distinct()<nums 也需要用波浪号转为函数。因为n_distinct()<nums 并不是函数。
msleep %>% select_if(~n_distinct(.) < 10)
select_all()
select_all()可以将函数作为参数更改所有列,如使用toupper(),tolower()转换大小写列名。也可以在选择的时候对列名进行规范处理,如结果str_replace()替换不规则的列名符号。
msleep2 %>% select_all(~str_replace(., " ", "_"))
行名和列名转换
基础方法
bind(Me.id=rownames(norm_order_betadata),norm_order_betadata)
rownames(norm_order_betadata) <- NUL
使用dplyr包
norm_order_betadata %>%
tibble::rownames_to_column("Me.id")
以上是关于dplyr包之实用总结之列选择及处理技巧的主要内容,如果未能解决你的问题,请参考以下文章