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包之实用总结之列选择及处理技巧的主要内容,如果未能解决你的问题,请参考以下文章

CSS文字处理实用小技巧总结

《Python机器学习及实践》----模型实用技巧

《Python机器学习及实践》----模型实用技巧

VS的一些实用快捷键及小技巧(不断更新)

实用的 PyYAML 使用技巧

R语言笔记——图标可视化包之formattable