r - 排除列名包含特定字符的列,并删除剩余列中包含 NA 的行

标签 r dataframe dplyr tidyverse

假设我有一个数据框 df如下:

          date      CPI:YoY  PPI:MoM
1   2018-01-15           NA       NA
2   2018-01-31          1.2      0.2
3   2018-01-15           NA       NA
4   2018-02-28          0.9     -0.1
5   2018-03-15           NA       NA
6   2018-03-31          1.0      0.3

我需要使用 dplyr 实现以下两个步骤:选择不包含 date 的列,然后删除这些列中所有值为 NA 的行s。

选择不包含 date 的列可以通过代码实现:dplyr::select(grep("date", names(df)))dplyr::select(contains("date", ignore.case = TRUE)) ;要删除所选列中的 NA 行,我们可以使用:filter_at(vars(cols), all_vars(!is.na(.)))dplyr::drop_na(cols) .

现在我的问题是如何将两个代码合并为一个?谢谢。

注意:对于此示例,我们可以简单地使用 drop_na(CPI:YoY, PPI:MoM)得到预期的结果,但是由于在实际数据中,我们通常有很多列,并且 date 的位置列不必始终是第一列,因此我更愿意通过排除 date 来对列进行子集化专栏。

预期结果:

          date      CPI:YoY  PPI:MoM
1   2018-01-31          1.2      0.2
2   2018-02-28          0.9     -0.1
3   2018-03-31          1.0      0.3

引用文献:

Subset data to contain only columns whose names match a condition

filtering data frame based on NA on multiple columns

最佳答案

您可以使用过滤器 + if_any/if_all:

df %>%
  filter( !if_all(-contains("date"), is.na) )
df %>%
  filter( if_any(-contains("date"), ~ !is.na(.)) )
df %>%
  filter( if_any(-contains("date"), Negate(is.na)) )

注意:取反(is.na) = function(x) !is.na(x) = ~ !is.na( .)

输出
        date CPI:YoY PPI:MoM
2 2018-01-31     1.2     0.2
4 2018-02-28     0.9    -0.1
6 2018-03-31     1.0     0.3
数据
df <- read.table(text =
"         date      CPI:YoY  PPI:MoM
1   2018-01-15           NA       NA
2   2018-01-31          1.2      0.2
3   2018-01-15           NA       NA
4   2018-02-28          0.9     -0.1
5   2018-03-15           NA       NA
6   2018-03-31          1.0      0.3", check.names = FALSE)

关于r - 排除列名包含特定字符的列,并删除剩余列中包含 NA 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73536941/

相关文章:

替换丢失顺序的 data.frame 中的值

r - dplyr::filter() 没有产生预期的输出

r - 使用逗号分隔的长度不等的数字字符串对多列进行数学运算

r - 从帮助页面和 pkgdown 中的单独包链接到 R6 方法

r - 使用 ggplot2 的线图中误差线的宽度

r - 如何根据另一列 R 中的重复更改列值

r - 如何 unnest_wider() 循环遍历包含列表的所有列?

r - sapply 的并行版本

pandas - 如何增加每列/组的索引

Python-将 numpy 数组作为列添加到不同长度的 pandas 数据框中