我正试图用dplyrs过滤器功能过滤数据帧中具有特定阈值(在本例中为>=1.2(的每一列。到目前为止,它运行得很好,但当我尝试运行代码时,突然收到了这个错误消息:
env_bind_lazy中的错误(private$bindings,!!set_names(promise,names_bindings((:尝试使用零长度变量名
这是我的数据帧的一部分(它有108列,有些行包含NA(:
平均值1 | ||
---|---|---|
1.1874 | 1.0944 | 1.2376 |
1.258 | 1.0665 | 1.2365 |
1.0953 | 1.1420 | 1.2479 |
1.2234 | 1.0949 | 1.0608 |
NA | NA | 1.146 |
此解决方案可能有效,并且与dplyr
方法更加一致。下面的代码使用mtcars作为示例。它将保留所有值都大于或等于1的行。
library(dplyr)
mtcars %>%
filter(
across(
.cols = everything(),
.fns = ~ .x >= 1
)
)
编辑:根据您是否希望处理丢失的数据,这应该会有所帮助。您可以指定要用于筛选的函数,然后在where语句中应用。下面是mtcars的另一个例子。
myrowfun <- function(x){is.na(x)| x >=2}
mtcars <- mutate(mtcars, mpg = NA)
mtcars$mpg[1:7] <- rep(1,7)
mtcars %>%
filter(myrowfun(
across(
.cols = everything(),
.fns = ~.x
)
)
)
编辑:添加一个如何删除所有缺失列的示例
mtcars <- mutate(mtcars, newcol = NA)
#shows which columns are not all missing
sapply(mtcars, function(x)all(!is.na(x)))
#subset on that
mtcars2 <- mtcars[, sapply(mtcars, function(x)all(!is.na(x)))]