码迷,mamicode.com
首页 > 其他好文 > 详细

dplyr包之实用总结之列选择及处理技巧

时间:2020-04-16 13:15:33      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:logic   ica   基础   部分   bind   select   保留   整合   大于   

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包之实用总结之列选择及处理技巧

标签:logic   ica   基础   部分   bind   select   保留   整合   大于   

原文地址:https://www.cnblogs.com/Cobby-baby/p/12711928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!