首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数在我的data.frame中创建一个新的data.frame。

函数在我的data.frame中创建一个新的data.frame。
EN

Stack Overflow用户
提问于 2016-04-23 05:49:12
回答 1查看 87关注 0票数 1

使用df data.frame

代码语言:javascript
运行
复制
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 bfflow中分离出来。

代码语言:javascript
运行
复制
library(EcoHydRology)
df$bf <- BaseflowSeparation(df$flow, filter_parameter = 0.925, passes = 3)

该函数创建两个新列bf.btbf.qft

我想用flowbf.btbf.qft三个参数在一个图上使用geom_line绘制,所以我尝试使用tidyr将data.frame从宽格式转换为长格式。

代码语言:javascript
运行
复制
library(tidyr)
df <- tidyr::gather(df, "parameter", "value", 2:4)

我犯了这个错误

Error: Position must be between 0 and n

我检查了df,发现BaseflowSeparation函数在df中创建了两个列的新的data.frame bf

代码语言:javascript
运行
复制
> 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 )的任何建议

EN

Stack Overflow用户

回答已采纳

发布于 2016-04-24 03:47:33

使用dplyr group_by按站点执行计算,然后使用do将来自BaseflowSeparation的结果与每个组的原始data.frame进行绑定,然后取消组以重新绑定组。

代码语言:javascript
运行
复制
df %>% 
    group_by(site) %>% 
    do(cbind(., BaseflowSeparation(.$flow, filter_parameter = 0.925, passes = 3))) %>% 
    ungroup()
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36807155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档