首页 > 解决方案 > 如何过滤掉R中的项目

问题描述

我意识到这可能很简单,但我在网上找到的结果比我拥有的要复杂得多,因此失去了我。在学习R的过程中,此时,创建一个简单的折线图。在制作图表之前,我需要过滤掉数据中的值。我正在寻找月度数据(周期类型 = '03')而不是年度数据(周期类型 = '01')。下面是我正在使用的代码和我收到的错误。我的数据框 labforce 包含两种周期类型。关于我应该如何处理这个问题的任何想法?

       con <- dbConnect(odbc::odbc(),"xyz-DB")
       > labforce1 <- dbGetQuery(con, "SELECT periodyear,period,unemprate 
       FROM labforce")


       labforce1m <- labforce1 %>%
       + filter (periodtype=='03')


       Error in UseMethod("filter_") : 
       no applicable method for 'filter_' applied to an object of class 
       "logical"

       dput(head(labforce1)) yields the following:

       structure(list(periodyear = c("1990", "1990", "1990", "1990", 
       "1990", "1990"), periodtype = c("03", "03", "03", "03", "03", 
       "03"), period = c("01", "02", "03", "04", "05", "06"), unemprate = 
       c(8.9, 
       8.8, 8.6, 7, 4.6, 5.8), date = structure(c(7305, 7336, 7364, 
       7395, 7425, 7456), class = "Date")), row.names = c(NA, 6L), class = 
       "data.frame")
       > 

      


       

标签: rfilterdplyr

解决方案


从聊天中,问题在于 OP 正在从其他人的论文中复制文本。该代码包括 R 的“行继续+”指示符,如

> labforce1 %>%
+   filter(periodtype=='03')

因为关于 SO 的许多问题都包括因为提问者从他们的 R 控制台复制了它,所以可以安全地假设这是控制台的一个属性,而不是输入的实际代码。但是,在这种情况下,它实际上是输入的 (粘贴)有效地

labforce1 %>% + filter(periodtype=='03')

对于我们正在尝试做的事情,这显然不是有效的 R 语法。

底线:+从论文、脚本或类似文件中粘贴代码时,删除(以及任何其他类似的行继续指示符)。

labforce1 %>%
  filter(periodtype == '03')

(这就是为什么许多 reprex 工具使用清晰的技术来区分代码和输出的原因之一,例如删除行继续标记和在所有输出前加上#.)


推荐阅读