当前位置:  开发笔记 > 编程语言 > 正文

使用R中的dplyr/magrittr删除/删除列

如何解决《使用R中的dplyr/magrittr删除/删除列》经验,为你挑选了1个好方法。

如何在R中删除带有dplyr/magrittr的列?

在这里,我想删除超过50%NAs的列(当然这不起作用):

delNAcols <- function(x){ ifelse( mean(is.na(x))>0.5, NULL, x ) }
d <- data.frame(x=c(1,2,NA),y=c(NA,NA,4))
d %>% mutate_each(funs(delNAcols))

两个答案(来自user3949008和akrun)都很好.

如果处理处于低位的开始,则可以使用两个答案的组合,由于短期和magrittr风格的最佳平衡,换句话说,最佳可读性:

d %>%
  sapply(function(x) mean(is.na(x)) < 0.5) %>% 
  extract(d,. )

因为它的重用d如果它在后面的流程中不起作用.然后user3949008的答案可以在小的改变之后使用(以及小的可读性改进):

d %>% select_(.dots = names(.)[which(sapply(., function(x) mean(is.na(x)) < 0.5))])

如果想让整个事情更简洁,那么就可以写出来

select_each <- function(df, fun) { df %>% sapply(fun) %>% extract(df,.) }
select_each <- function(df, fun) { df %>% select_(.dots = names(.)[which(sapply(., fun))]) }

d %>%
  select_each( function(x) mean(is.na(x)) < 0.5 )

两个select_each功能在功能上相同.但是,我对它们进行了基准测试,第一个测试速度快了三倍.



1> akrun..:

我们可以用 base R

Filter(function(x) mean(is.na(x)) <= 0.5, d)

或者如果我们需要使用 flow

library(dplyr)
library(magrittr)
d %>%
   summarise_each(funs(mean(is.na(.)) <= 0.5)) %>% 
   unlist %>% 
   extract(d,. )

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有