【问题标题】:R: Using dplyr to filter out a dataframeR:使用 dplyr 过滤掉数据框
【发布时间】:2018-05-30 15:17:30
【问题描述】:

我是 R 新手,我无法针对特定条件过滤掉我的数据框。出于某种原因,代码正在运行,我没有收到任何错误,但是当我查看更新的数据框时......我设置的条件没有执行。

未执行的条件是 var>50。 任何帮助将不胜感激!

到目前为止的代码:

if (!require(pacman)) {
  install.packages('pacman')

}

pacman::p_load("ggplot2", "tidyr", "plyr", "dplyr")
#### Read in the necessary data ######
roadsalt_data <- read.table("QADportaldata_1988-2015.tsv", header = T, sep = "\t", fill = T, stringsAsFactors = F)
# Convert date column from a character class to a date class so ggplot can  display as a continuous variable ###
roadsalt_data$stdate <- as.Date(roadsalt_data$stdate)
## Filter dataset to only contain columns I need ########
filtered_roadsalt <- roadsalt_data %>% 
  select(orgid, stdate, locid, charnam, val) %>%
  filter(between(stdate, as.Date("1996-01-01"), as.Date("2015-07-01"))) %>%
  filter(charnam == "Total dissolved solids" & "var" > 50) 

我的数据集预览:

'data.frame':   47850 obs. of  5 variables:
 $ orgid  : chr  "USGS-NJ" "USGS-NJ" "USGS-NJ" "USGS-NJ" ...
 $ stdate : Date, format: "2014-03-05" "2014-03-05" "2014-03-04" ...
 $ locid  : chr  "USGS-01367785" "USGS-01367785" "USGS-01455099" "USGS-01455099" ...
 $ charnam: chr  "Total dissolved solids" "Total dissolved solids" "Total dissolved solids" "Total dissolved solids" ...
 $ val    : chr  "0.21" "154" "0.43" "333" ...

【问题讨论】:

    标签: r dataframe dplyr tidyverse


    【解决方案1】:

    我假设 class(val) 是一个因素,那么过滤器中的条件必须是这样的:

    filter(charnam == "Total dissolved solids" & as.numeric(as.character(val)) > 50.00)
    

    【讨论】:

    • 成功了!非常感谢...希望以后不要犯这种菜鸟错误哈哈
    【解决方案2】:

    使用 dplyr 函数时,您不需要在变量名周围加上引号。所以,

    filter(charnam == "Total dissolved solids" & "var" > 50) 
    

    应该替换为

    filter(charnam == "Total dissolved solids" & var > 50)
    

    Var 也必须转换为数值变量。

    话虽如此,如果您在管道的开头select,则必须包含要添加过滤器的所有变量。因为您没有在初始select 语句中选择名为“var”的变量,所以您将无法过滤var。如果这意味着“val”,那么你就可以开始了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-27
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      相关资源
      最近更新 更多