R: Использование dplyr для фильтрации данных - PullRequest
0 голосов
/ 30 мая 2018

Я новичок в R, и у меня возникают проблемы с фильтрацией моего информационного кадра для определенного условия.По какой-то причине код работает, и я не получаю никаких ошибок, но когда я просматриваю обновленный фрейм данных ... условие, которое я установил, не оправдывает себя.

Условие, которое не исключает, являетсявар> 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 голосов
/ 30 мая 2018

При использовании функций dplyr вам не нужны кавычки вокруг имен ваших переменных.Таким образом,

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

следует заменить на

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

Var также необходимо преобразовать в числовую переменную.

При этом, если вы selectв начале вашего канала вы должны включить все переменные, к которым вы хотите добавить фильтры.Поскольку вы не выбрали переменную с именем "var" в своем начальном операторе select, поэтому вы не сможете фильтровать по var.Если это означает «val», значит, вы готовы.

0 голосов
/ 30 мая 2018

Я предполагаю, что класс (val) является фактором, тогда условие в фильтре должно быть таким:

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