我想过滤iris Dataframe ,只返回萼片中值大于2的行。长度,萼片。宽度,花瓣。长度和花瓣。宽度字段使用过滤器和跨函数。我有下面的代码:
iris%>% filter(across(c(Sepal.Length, Sepal.Width , Petal.Length, Petal.Width), >2))
错误消息是:Error: unexpected '>' in:有人能建议修改代码来解决这个问题吗?
Error: unexpected '>' in:
6l7fqoea1#
基于dplyr的可能解决方案:
dplyr
library(dplyr) iris%>% filter(across(is.numeric, ~ .x > 2))
或者:
iris%>% filter(across(c(Sepal.Length,Sepal.Width,Petal.Length,Petal.Width), ~ .x > 2))
或者甚至:
iris%>% filter(across(ends_with(c("Length","Width")), ~ .x > 2))
oug3syen2#
两种可能
iris %>% filter(across(c(Sepal.Length, Sepal.Width , Petal.Length, Petal.Width), `>`, 2))
iris %>% filter(across(c(Sepal.Length, Sepal.Width , Petal.Length, Petal.Width), ~ .x > 2)) # or iris %>% filter(across(c(Sepal.Length, Sepal.Width , Petal.Length, Petal.Width), function(x) x > 2))
让我们从第二个例子开始-我们使用匿名函数表示法,第一个是purrr的风格,第二个是,让我们称之为经典风格。Purrr的风格只适用于某些软件包。现在第一个-across()想要作为第二个参数的是一个函数,但您需要使用前缀形式的函数Advanced R。R中的所有函数都有这种形式,但通常没有必要使用它,例如:
across()
2 + 2 `+`(2, 2)
是一样的。在across()中,当你传递(作为第二个参数)函数时,你可以在逗号后传递所有其他可以传递给这个函数的参数。对于>,第一个参数是,第一个数字,然后从iris得到值,第二个参数是数字2,i。即您选择用来检查列中值的数字。
>
iris
2
kb5ga3dv3#
使用dplyr的潜在解决方案:
iris %>% filter(Sepal.Length > 2 & Sepal.Width >2 & Petal.Length >2 & Petal.Width >2)
压缩版本:
iris %>% filter_at(vars(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width),all_vars(.>2))
cmssoen24#
更新了dplyr(〉= 1.0.8)解决方案看起来像:
library(dplyr) iris%>% filter(if_any(where(is.numeric), ~ .x > 2))
4条答案
按热度按时间6l7fqoea1#
基于
dplyr
的可能解决方案:或者:
或者甚至:
oug3syen2#
两种可能
让我们从第二个例子开始-我们使用匿名函数表示法,第一个是purrr的风格,第二个是,让我们称之为经典风格。Purrr的风格只适用于某些软件包。
现在第一个-
across()
想要作为第二个参数的是一个函数,但您需要使用前缀形式的函数Advanced R。R中的所有函数都有这种形式,但通常没有必要使用它,例如:是一样的。
在
across()
中,当你传递(作为第二个参数)函数时,你可以在逗号后传递所有其他可以传递给这个函数的参数。对于>
,第一个参数是,第一个数字,然后从iris
得到值,第二个参数是数字2
,i。即您选择用来检查列中值的数字。kb5ga3dv3#
使用
dplyr
的潜在解决方案:压缩版本:
cmssoen24#
更新了
dplyr
(〉= 1.0.8)解决方案看起来像: