r-env_bind_lazy中的错误(private$bindings,!!set_names(promise,nam



我正试图用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)))]

最新更新