首页 > 解决方案 > 基于多列自动过滤到子集数据

问题描述

这是我试图子集的数据集:

df<-data.frame(
id=c(1:5),
ax1=c(5,3,7,-1,9),
bx1=c(0,1,-1,0,3),
cx1=c(2,1,5,-1,5),
dx1=c(3,7,2,1,8))

数据集有一个在不同时间点测量的变量 x1,用 ax1、bx1、cx1 和 dx1 表示。我试图通过删除任何列(即 ax1、bx1、cx1、dx1)上带有 -1 的行来对这些数据进行子集化。我想知道是否有一种方法可以自动过滤(或过滤功能)来执行此任务。我熟悉重点是基于单个列(或变量)过滤行的情况。

对于当前的情况,我尝试从

mutate_at( vars(ends_with("x1"))

选择所需的列,但我不确定如何将其与过滤器功能结合以产生所需的结果。预期输出将删除第 3 行和第 4 行。我很感激这方面的任何帮助。这里解决了一个类似的案例,但这还没有通过自动化过程完成。我想使自动化适应具有多列的大数据的情况。

标签: rdataframedplyrsubset

解决方案


您可以filter()使用across().

library(dplyr)

df %>%
  filter(across(ends_with("x1"), ~ .x != -1))

#   id ax1 bx1 cx1 dx1
# 1  1   5   0   2   3
# 2  2   3   1   1   7
# 3  5   9   3   5   8

它相当于filter_at()with all_vars(),它已被 取代dplyr 1.0.0

df %>%
  filter_at(vars(ends_with("x1")), all_vars(. != -1))

推荐阅读