R:使用dplyr过滤掉数据帧

时间:2018-05-30 15:17:30

标签: r dataframe dplyr tidyverse

我是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" ...

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

使用dplyr函数时,您不需要围绕变量名称引用。所以,

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

应替换为

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

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

话虽如此,如果您在管道的开头select,则必须包含要添加过滤器的所有变量。因为你还没有选择一个名为&#34; var&#34;的变量。在您的初始select声明中,您无法对var进行过滤。如果这意味着“&”,那么你就行了。