在 R 中的函数中调用过滤器(子集)两次
Call filter (subset) twice in a function in R
我想编写一个使用 dplyr::filter()
函数将我的数据子集化为 10 年时间片的函数。我的函数如下所示,但这似乎只是 return 第二次调用 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 年的时间段。然后我希望能够通过这些 'subsets' 汇总数据。
函数
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)
既然没人回答,我就根据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)
}
我想编写一个使用 dplyr::filter()
函数将我的数据子集化为 10 年时间片的函数。我的函数如下所示,但这似乎只是 return 第二次调用 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 年的时间段。然后我希望能够通过这些 'subsets' 汇总数据。
函数
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)
既然没人回答,我就根据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)
}