我是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" ...
答案 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
进行过滤。如果这意味着“&”,那么你就行了。