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), ]