使用df data.frame
set.seed(123)
date <- as.Date(seq(as.Date("2003-01-01"), as.Date("2008-05-31"), by = 1), format="%Y-%m-%d")
flow <- runif(1978, 48530, 1250365)
df <- data.frame(date, flow)在EcoHydRology包中,使用BaseflowSeparation函数将baseflow bf从flow中分离出来。
library(EcoHydRology)
df$bf <- BaseflowSeparation(df$flow, filter_parameter = 0.925, passes = 3)该函数创建两个新列bf.bt和bf.qft
我想用flow、bf.bt和bf.qft三个参数在一个图上使用geom_line绘制,所以我尝试使用tidyr将data.frame从宽格式转换为长格式。
library(tidyr)
df <- tidyr::gather(df, "parameter", "value", 2:4)我犯了这个错误
Error: Position must be between 0 and n
我检查了df,发现BaseflowSeparation函数在df中创建了两个列的新的data.frame bf。
> str(df)
'data.frame': 1978 obs. of 3 variables:
$ date: Date, format: "2003-01-01" "2003-01-02" "2003-01-03" ...
$ flow: num 394151 995943 540053 1109771 1178816 ...
$ bf :'data.frame': 1978 obs. of 2 variables:
..$ bt : num 168374 171233 172381 150429 120018 ...
..$ qft: num 178506 824710 367671 959342 1058798 ...关于如何将BaseflowSeparation函数的输出作为两列(而不是新data.frame )的任何建议
发布于 2016-04-24 03:47:33
使用dplyr group_by按站点执行计算,然后使用do将来自BaseflowSeparation的结果与每个组的原始data.frame进行绑定,然后取消组以重新绑定组。
df %>%
group_by(site) %>%
do(cbind(., BaseflowSeparation(.$flow, filter_parameter = 0.925, passes = 3))) %>%
ungroup()https://stackoverflow.com/questions/36807155
复制相似问题