我必须将为dplyr设计的两组代码转换为基本R代码,因为我使用的软件包不支持dplyr。我的代码如下。任何人都可以帮忙转换吗?我对基地R不是很有经验。
#Annual average
riverObs %>%
filter(!is.na(Qobs)) %>%
mutate(year = lubridate::year(date)) %>%
group_by(year) %>%
mutate(s1 = Qsim-Qobs,
s2 = abs(s1),
s3 = sum(s2),
s4 = sum(Qobs),
s5 = s3/s4,
s6 = 1-s5) %>%
summarise(AAVE = mean(s6))
#Annual peak error, Qobs
riverObs %>%
filter(!is.na(Qobs)) %>%
mutate(year = lubridate::year(date)) %>%
group_by(year) %>%
filter(Qobs == max(Qobs)) %>%
select(year, Qobs) %>%
ungroup
答案 0 :(得分:1)
根据您的评论,我认为以下是您的问题:您无法将dplyr
与hydromad
一起使用,因为两个软件包之间存在冲突。例如。两个包中都有相同名称的函数。
解决此问题的一种方法是,不是加载dplyr
,而是按以下方式调用其功能:dplyr::filter
,dplyr::select
等。您必须考虑的一件事情是使用管道%>%
,你必须加载magrittr
包。
答案 1 :(得分:0)
试试这个
library(data.table)
riverObs <- as.data.table(riverObs)
riverObs <- na.omit(riverObs)
riverObs[,year:=(year(date))]
riverObs[,s1:=(Qsim-Qobs),by="year"]
riverObs[,s2:=abs(s1)]
riverObs[,s3:=sum(s2),by="year"]
riverObs[,s4:=sum(Qobs),by="year"]
riverObs[,s5:=s3/s4]
riverObs[,s6:=1-s5,by="year"]
riverObs[,AAVE:=mean(s6),by="year"]
riverObs <- as.data.table(riverObs)
riverObs <- na.omit(riverObs)
riverObs[,year:=(year(date))]
riverObs[,max_Qobs:=max(Qobs),by="year"]
riverObs <- riverObs[Qobs == max(Qobs),]
riverObs <- riverObs[,.(year,Qobs)]