【问题标题】:R function creates a new data.frame within my data.frameR函数在我的data.frame中创建一个新的data.frame
【发布时间】:2016-04-23 05:49:12
【问题描述】:

使用dfdata.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 bfflow 分开。

library(EcoHydRology)
df$bf <- BaseflowSeparation(df$flow, filter_parameter = 0.925, passes = 3)

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

我想使用geom_line 在一张图上绘制三个参数flowbf.btbf.qft,所以我尝试使用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

【问题讨论】:

  • 使用 df
  • @chinsoon12 非常感谢。你能把它写成答案吗?
  • @chinsoon12 如果我有很多站点并且我正在使用 dpyr 根据站点进行分组。任何建议如何在 dplyr 中使用此功能?再次感谢
  • 每个站点都有df吗?或者df中是否有一个名为site的列?
  • 在df中有一个叫做site的列。

标签: r dataframe


【解决方案1】:

使用 dplyr group_by 按站点执行计算,然后使用 do 将 BaseflowSeparation 的结果与每个组的原始 data.frame 绑定,然后取消组合到 rbind 组

df %>% 
    group_by(site) %>% 
    do(cbind(., BaseflowSeparation(.$flow, filter_parameter = 0.925, passes = 3))) %>% 
    ungroup()

【讨论】:

  • 感谢您的宝贵时间和帮助
  • 没问题!干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 2013-10-14
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多