У меня возникают проблемы при попытке создать новый фрейм данных, который создает процент в год с помощью dplyr.
Фрейм данных выглядит следующим образом:
structure(list(orgid = c("USGS-NJ", "USGS-NJ", "USGS-NJ", "USGS-NJ",
"USGS-NJ", "USGS-NJ", "USGS-NJ", "USGS-NJ", "USGS-NJ", "USGS-NJ",
"USGS-PA", "USGS-PA", "USGS-NJ", "USGS-NJ", "USGS-NJ"), stdate = structure(c(16134,
16133, 16135, 16133, 16105, 15749, 16112, 16394, 16610, 16610,
16511, 16560, 16566, 16328, 16324), class = "Date"), locid = c("USGS-01367785",
"USGS-01455099", "USGS-01440000", "USGS-01380100", "USGS-01398000",
"USGS-01461880", "USGS-0140940950", "USGS-01482500", "USGS-0146453250",
"USGS-0146453250", "USGS-01444800", "USGS-01444800", "USGS-01477120",
"USGS-01392150", "USGS-01376274"), charnam = c("Total dissolved solids",
"Total dissolved solids", "Total dissolved solids", "Total dissolved solids",
"Total dissolved solids", "Total dissolved solids", "Total dissolved solids",
"Total dissolved solids", "Total dissolved solids", "Total dissolved solids",
"Total dissolved solids", "Total dissolved solids", "Total dissolved solids",
"Total dissolved solids", "Total dissolved solids"), val = c("154",
"333", "109", "143", "711", "218", "104", "157", "506", "471",
"3040", "1110", "142", "429", "266")), .Names = c("orgid", "stdate",
"locid", "charnam", "val"), row.names = c(NA, 15L), class = "data.frame")
Я хочу создать новый столбецс процентом общего количества растворенных твердых веществ в каждом году, который составляет> 500.
Код, который у меня есть на данный момент:
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" & as.numeric(as.character(val)) > 50.00)
##create a dataframe for percent of TDS >500
percent_data<-filtered_roadsalt %>%
mutate(year=as.Date(cut(stdate, breaks = "year"))) %>%
group_by(year) %>%
mutate(prop = round(as.numeric(as.character(val))/sum(as.numeric(as.character(val)))*100, 2))
Это, однако, не дает мне результатов, которых я добиваюсь.у меня должен быть 19 наблюдений и 2 переменные.19 наблюдений, проводимых каждый год с 1997 по 2015 год, и процент.Любая помощь будет принята с благодарностью!Спасибо!