【问题标题】:Call filter (subset) twice in a function in R在 R 中的函数中调用过滤器(子集)两次
【发布时间】:2016-05-22 22:25:26
【问题描述】:

我想编写一个函数,使用 dplyr::filter() 函数将我的数据子集为 10 年时间片。我的函数如下,但这似乎只返回第二次调用filter()的值。

如何编写一个函数,将数据分成多个时间段,然后汇总数据?

示例数据

aggr.data <- dput(head(aggr.data))
structure(list(time = c(2020, 2020, 2020, 2020, 2020, 2020), 
dayofyr = 1:6, NPP = c(0, 0, 0, 0, 0, 0), 
soc = c(2582.0408, 2582.3461, 2582.7023, 2582.9979, 2583.1896, 2583.4067)),
.Names = c("time", "dayofyr", "NPP", "soc"), 
row.names = c(NA, 6L), class = "data.frame")

在这里,我尝试过滤 2020 年至 2029 年,然后是 2030 年至 2039 年的时间段。然后我希望能够按这些“子集”聚合数据。

功能

 testFunction <- function(x) {
      time2020 <- filter(x, time >= 2020, time <= 2029.92);
      time2040 <- filter(x, time>= 2030, time <= 2039.92);
      test1 <- summarise(time2020, mean.soc = mean(soc), mean.npp = sum(NPP/20));
      test2 <- summarise(time2040, mean.soc = mean(soc), mean.npp = sum(NPP/20))
    }

对数据运行函数

testFunction(aggr.data)

【问题讨论】:

  • 函数返回的内容有问题吗?您是否在函数的最后一行尝试了list('test1' = test1, 'test2' = test2)?此外,您可能需要指定dplyr::filter()
  • 啊,是的!我不知道列表..

标签: r function filter dplyr subset


【解决方案1】:

由于没有人回答,我将根据 bouncyball 的评论回答。 该函数需要list() 参数。

   testFunction <- function(x) {
          time2020 <- filter(x, time >= 2020, time <= 2029.92);
          time2040 <- filter(x, time>= 2030, time <= 2039.92);
          test1 <- summarise(time2020, mean.soc = mean(soc), mean.npp = sum(NPP/20));
          test2 <- summarise(time2040, mean.soc = mean(soc), mean.npp = sum(NPP/20))   
 list('test1' = test1, 'test2' = test2)
        }

【讨论】:

    猜你喜欢
    • 2015-11-03
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2012-07-11
    • 2016-09-23
    • 1970-01-01
    相关资源
    最近更新 更多