gpt4 book ai didi

使用 dplyr 删除所有变量均为 NA 的行

转载 作者:行者123 更新时间:2023-12-03 11:10:59 25 4
gpt4 key购买 nike

我在一个看似简单的任务中遇到了一些问题:删除所有变量都是 NA 的所有行使用 dplyr。我知道可以使用 base R( Remove rows in R matrix where all data is NARemoving empty rows of a data file in R )来完成,但我很想知道是否有使用 dplyr 的简单方法。

例子:

library(tidyverse)
dat <- tibble(a = c(1, 2, NA), b = c(1, NA, NA), c = c(2, NA, NA))
filter(dat, !is.na(a) | !is.na(b) | !is.na(c))
filter上面的调用做了我想要的,但在我面临的情况下是不可行的(因为有大量的变量)。我想可以通过使用 filter_ 来做到这一点。并首先使用(长)逻辑语句创建一个字符串,但似乎应该有一种更简单的方法。

另一种方法是使用 rowwise()do() :
na <- dat %>% 
rowwise() %>%
do(tibble(na = !all(is.na(.)))) %>%
.$na
filter(dat, na)

但这看起来不太好,尽管它完成了工作。其他想法?

最佳答案

由于 dplyr 0.7.0 新,范围过滤动词存在。使用 filter_any,您可以轻松过滤包含至少一个非缺失列的行:

# dplyr 0.7.0
dat %>% filter_all(any_vars(!is.na(.)))
使用@hejseb 基准测试算法,该解决方案似乎与 f4 一样有效。
更新:
从 dplyr 1.0.0 开始,上述范围动词被取代。相反,引入了跨函数系列,它允许在多个(或所有)列上执行一个函数。过滤至少一列不是 NA 的行现在看起来像这样:
# dplyr 1.0.0
dat %>% filter(if_any(everything(), ~ !is.na(.)))

关于使用 dplyr 删除所有变量均为 NA 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41609912/

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