如何修复UseMethod(“ filter_”)中的dplyr filter()错误

时间:2019-07-31 08:54:24

标签: r select dplyr

当我尝试从创建的数据矩阵中选择数据时,我收到一个错误,我希望有人可以帮助我并修复它。

  

UseMethod(“ filter_”)中的错误:'filter_'没有适用的方法   应用于类“ c('matrix','double','numeric')”的对象

我尝试通过执行dplyr来调用该函数: 或使用某些管道操作mydata%>%filter(2010)或什至已安装和加载的软件包“冲突”,并给dplyr一个优先级,但没有任何效果。我是r的新人。

Matrix_5c_AVG_Year  <- cbind(AVG_SWE_YEAR,AVG_NO[,2],AVG_FI[,2],AVG_EE[,2],AVG_LV[,2],AVG_LT[,2])
colnames(Matrix_5c_AVG_Year) <- c("Year","AVG_SWE1", "AVG_NO1", "AVG_FI1", "AVG_EE1", "AVG_LV1", "AVG_LT1") 
mydata<-Matrix_5c_AVG_Year  
mydata %>% filter(2010)

我只希望获得2010年数据的输出,并且只能选择一个标头。

2 个答案:

答案 0 :(得分:0)

如@brettljausn所评论,您需要将矩阵转换为data.frame。如果您未添加要在其上比较条件值的列名,则在调用filter时也会出错。

这应该可以说明您的问题和解决方案(由于您使用的是filter,所以继续tidyverse):

library(tidyverse)


(a <- matrix(c(5,1), 2, 2))
#>      [,1] [,2]
#> [1,]    5    5
#> [2,]    1    1

colnames(a) <- c("Year", "AVG_SWE1")

a %>%
  filter(Year == 5)
#> Error in UseMethod("filter_"): no applicable method for 'filter_' applied to an object of class "c('matrix', 'double', 'numeric')"

(a2 <- as_tibble(a))
#> # A tibble: 2 x 2
#>    Year AVG_SWE1
#>   <dbl>    <dbl>
#> 1     5        5
#> 2     1        1

a2 %>%
  filter(Year == 5)
#> # A tibble: 1 x 2
#>    Year AVG_SWE1
#>   <dbl>    <dbl>
#> 1     5        5

reprex package(v0.3.0)于2019-07-31创建

由于您是新手,所以建议您阅读https://r4ds.had.co.nz/的第1-16章。

答案 1 :(得分:0)

多亏了larsoevlisen,我知道我的数据是一个矩阵,无法以这种方式进行操作,因此我不得不将它们转换为data.frame()来过滤所需的数据。

最终解决方案:

Matrix_5c_AVG_Year  < cbind(AVG_SWE_YEAR,AVG_NO_YEAR[,2],AVG_FI_YEAR[,2],AVG_EE_YEAR[,2],AVG_LV_YEAR[,2],AVG_LT_YEAR[,2])
 Matrix_5c_AVG_Year  <-data.frame(Matrix_5c_AVG_Year)
colnames(Matrix_5c_AVG_Year) <- c("Year","AVG_SWE1", "AVG_NO1",
"AVG_FI1", "AVG_EE1", "AVG_LV1", "AVG_LT1")