Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 自动筛选基于多列的子集数据_R_Dataframe_Dplyr_Subset - Fatal编程技术网

R 自动筛选基于多列的子集数据

R 自动筛选基于多列的子集数据,r,dataframe,dplyr,subset,R,Dataframe,Dplyr,Subset,以下是我正在尝试子集的数据集: 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)) 选择所需的列,但我不确定如何将其与filter函数结合以生成所需的结果。expect输出将删除第3行和第4行。我非常感谢你在这方面的帮助。有一个类似的案例得到了解决,但还没有通过自动化流程解决。我想使自动化适应具有多个列的大数据的情况 您可以使用带交叉的过

以下是我正在尝试子集的数据集:

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))
选择所需的列,但我不确定如何将其与filter函数结合以生成所需的结果。expect输出将删除第3行和第4行。我非常感谢你在这方面的帮助。有一个类似的案例得到了解决,但还没有通过自动化流程解决。我想使自动化适应具有多个列的大数据的情况

您可以使用带交叉的过滤器

它相当于使用所有变量筛选,在dplyr 1.0.0中已被取代

您可以将过滤器与跨接一起使用

它相当于使用所有变量筛选,在dplyr 1.0.0中已被取代

使用过滤器

使用过滤器

使用基本R:

行和

使用基本R:

行和


+1为@Darren的解决方案。作为更广泛的评论,我认为如果您的数据集是可用的,您会发现这个问题和其他问题更容易解决。在某种程度上,整洁度取决于上下文,但在这里,类似于tibble的东西,带有ID、时间和值列,可能会起作用。@Darren Tsai,谢谢!我得到这个错误,无法找到函数。我想知道Cross函数是否来自特定的包?@TRichard Cross是dplyr 1.0.0中的一个新函数。您可以尝试更新您的dplyr版本,跨版本将起作用。@Darren的解决方案+1。作为更广泛的评论,我认为如果您的数据集是可用的,您会发现这个问题和其他问题更容易解决。在某种程度上,整洁度取决于上下文,但在这里,类似于tibble的东西,带有ID、时间和值列,可能会起作用。@Darren Tsai,谢谢!我得到这个错误,无法找到函数。我想知道Cross函数是否来自特定的包?@TRichard Cross是dplyr 1.0.0中的一个新函数。您可以尝试更新dplyr版本,跨版本将起作用。如果可能的话,听起来像是处理长格式数据的一个案例。然后它可以是类似于dflong%>%group\u byid%>%filter的东西!anyvalue==-1如果可能的话,听起来像是处理长格式数据的例子。然后它可以是类似于dflong%>%group\u byid%>%filter的东西!anyvalue==-1
mutate_at( vars(ends_with("x1"))
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
df %>%
  filter_at(vars(ends_with("x1")), all_vars(. != -1))
 library(tidyverse)

 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))
 df

 df %>%
   filter_at(vars(ax1:dx1), ~. != as.numeric(-1))

 # id ax1 bx1 cx1 dx1
 # 1  1   5   0   2   3
 # 2  2   3   1   1   7
 # 3  5   9   3   5   8
cols <- grep('x1$', names(df))
df[rowSums(df[cols] == -1) == 0, ]

#  id ax1 bx1 cx1 dx1
#1  1   5   0   2   3
#2  2   3   1   1   7
#5  5   9   3   5   8
df[!apply(df[cols] == -1, 1, any), ]