gpt4 book ai didi

r - 在 R 中使用 dplyr/magrittr 删除/删除列

转载 作者:行者123 更新时间:2023-12-04 11:40:33 25 4
gpt4 key购买 nike

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

这里我想删除 NA 超过 50% 的列(这当然行不通):

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)都很好。

如果处理是在 low 的开头,可以使用两个答案的组合,这是由于简短和 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 函数在功能上是相同的。但是,我对它们进行了基准测试,发现第一个的速度是它的三倍。

最佳答案

我们可以使用base R

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

或者如果我们需要使用

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

关于r - 在 R 中使用 dplyr/magrittr 删除/删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34612887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com