r语言subset或filter

类似于subset或filter功能中,对数据框中所有列进行筛选,怎么选择所有列啊?就是想对数据框里的所有数值进行筛选,保留±0.8以外的数据,怎么写啊,我总感觉一个语句就可以的,百度了一天,不会啊。

#我的错误代码:
data6 <- data1 %>% filter(across(everything(), ~.x >= 0.8 & ~.x <= -0.8))
#报错:
Error in `filter()`:
i In argument: `across(everything(), ~.x >= 0.8 & ~.x <= -0.8)`.
Caused by error in `across()`:
! Can't compute column `A2ML1`.
Caused by error in `.x >= 0.8 & (~ .x <= -0.8)`:
! operations are possible only for numeric, logical or complex types
Run `rlang::last_trace()` to see where the error occurred.

#我的错误瞎写的代码
data5 <- subset.data.frame(data1, abs(data1) >= 0.8)
#结果不对。。。

可以了,但是不知道哪一步(可能是apply引起的),导致行名中多了全部的列名,数值处显示为1,不知道咋弄,反正是删除就好了。


library("dplyr")
setwd("F:\\shi")
data1 <- read.csv("lncRNA-GPCR_DGE.csv", header = TRUE, sep = ",", row.names = 1)
# 用apply筛选数据
data9 <- apply(data1, 1, function(x) x[abs(x) >=0.8])
# 转换为数据框形式
data10 <- data.frame(t(sapply(data9, "[", i = 1:max(sapply(data9, length)))))#按列
data10[data10=='1'] <- NA
# 或者新建函数removeRowsAllNa,删除数据框中全部为NA的行
removeRowsAllNa  <- function(x){x[apply(x, 1, function(y) any(!is.na(y))),]}
data10_2 <- removeRowsAllNa(data10)
write.csv(data10_2,"data10_2.csv")

该回答引用GPT:
你好,你的问题是如何在r语言中对一个数据框中的所有列进行筛选并保留±0.8以外的数据。对于这个问题,可以使用across函数对所有列进行操作,并且需要加上is.numeric判断是否为数值类型,然后再用逻辑运算进行筛选。具体代码如下:

library(dplyr)
data_filtered <- data1 %>%
                 filter(across(where(is.numeric), ~.x > 0.8 | .x < -0.8)))

其中,where()函数用于指定列的条件,is.numeric表示仅对数值型列进行操作,~.x > 0.8 | .x < -0.8表示筛选出所有±0.8以外的数据。这个语句将保留数据框中的所有数值型列,并筛选出±0.8以外的数据。如果你想要保留所有列,包括非数值型列,可以将where(is.numeric)改为everything()。

另外,你之前写的代码存在语法错误,需要改为以下形式:

data6 <- data1 %>% 
         filter(across(where(is.numeric), ~.x >= -0.8 & .x <= 0.8)))

其中,“~.x >= -0.8 & .x <= 0.8”表示筛选出所有±0.8以内的数据,与你的需求相反。
如还有疑问,可留言帮助解决。