将代码从dplyr转换为base R.

时间:2017-07-05 08:31:37

标签: r dplyr

我必须将为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

2 个答案:

答案 0 :(得分:1)

根据您的评论,我认为以下是您的问题:您无法将dplyrhydromad一起使用,因为两个软件包之间存在冲突。例如。两个包中都有相同名称的函数。

解决此问题的一种方法是,不是加载dplyr,而是按以下方式调用其功能:dplyr::filterdplyr::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)]