r - R:根据日期计算平均行数。tidyverse
问题描述
你们中的一些人通过基本 R 来帮助解决这个问题,但我现在正试图用整洁的数据来解决这个问题。这是我的数据集:
data <- tibble( "DATE_FIRE"= c("1989-07-31", "1989-07-31", "1989-07-31", "1989-07-31","1989-07-31","1989-08-31", "1989-08-31", "1989-08-31", "1989-08-31","1989-08-31"),
"FID_FIRE" = c(1,1,1,1,1,2,2,2,2,2),
"date" = c("1988-01-01", "1989-01-01","1990-01-01","1991-06-07","1992-01-01", "1988-01-01", "1989-01-01","1990-01-01","1991-06-07","1992-01-01"),
"NDVI" = c( 0.9, 0.8, 0.1, 0.2, 0.3, 0.8, 0.85, 0.15, 0.30, 0.50))
> data
# A tibble: 10 x 4
DATE_FIRE FID_FIRE date NDVI
<chr> <dbl> <chr> <dbl>
1 1989-07-31 1 1988-01-01 0.9
2 1989-07-31 1 1989-01-01 0.8
3 1989-07-31 1 1990-01-01 0.1
4 1989-07-31 1 1991-06-07 0.2
5 1989-07-31 1 1992-01-01 0.3
6 1989-08-31 2 1988-01-01 0.8
7 198`enter code here`9-08-31 2 1989-01-01 0.85
8 1989-08-31 2 1990-01-01 0.15
9 1989-08-31 2 1991-06-07 0.3
10 1989-08-31 2 1992-01-01 0.5
如您所见,我有 2 个森林地块的日期,即火灾 1 和火灾 2(FID_FIRE
列)。DATE_FIRE
告诉我们每个地块发生火灾的时间,我也有NDVI
这些地块的(绿化参数)数据,在火灾之前和之后(参见列date
和NDVI
)。
我想为每个图添加一列计算火灾发生前的平均值。在这种情况下,它将是 和的平均值。NDVI
FID_FIRE=1
NDVI
row 1
2
输出应如下所示:
> desired_output
# A tibble: 10 x 5
DATE_FIRE FID_FIRE date NDVI meanPrefire
<chr> <dbl> <chr> <dbl> <dbl>
1 1989-07-31 1 1988-01-01 0.9 0.85
2 1989-07-31 1 1989-01-01 0.8 0.85
3 1989-07-31 1 1990-01-01 0.1 0.85
4 1989-07-31 1 1991-06-07 0.2 0.85
5 1989-07-31 1 1992-01-01 0.3 0.85
6 1989-08-31 2 1988-01-01 0.8 0.825
7 1989-08-31 2 1989-01-01 0.85 0.825
8 1989-08-31 2 1990-01-01 0.15 0.825
9 1989-08-31 2 1991-06-07 0.3 0.825
10 1989-08-31 2 1992-01-01 0.5 0.825
解决方案
尝试:
library(dplyr)
data %>%
group_by(FID_FIRE) %>%
mutate(meanPrefire = mean(NDVI[date < DATE_FIRE], na.rm = TRUE))
输出:
# A tibble: 10 x 5
# Groups: FID_FIRE [2]
DATE_FIRE FID_FIRE date NDVI meanPrefire
<chr> <dbl> <chr> <dbl> <dbl>
1 1989-07-31 1 1988-01-01 0.9 0.85
2 1989-07-31 1 1989-01-01 0.8 0.85
3 1989-07-31 1 1990-01-01 0.1 0.85
4 1989-07-31 1 1991-06-07 0.2 0.85
5 1989-07-31 1 1992-01-01 0.3 0.85
6 1989-08-31 2 1988-01-01 0.8 0.825
7 1989-08-31 2 1989-01-01 0.85 0.825
8 1989-08-31 2 1990-01-01 0.15 0.825
9 1989-08-31 2 1991-06-07 0.3 0.825
10 1989-08-31 2 1992-01-01 0.5 0.825
推荐阅读
- http - 如何解决自签名证书错误?
- python - 使用 NumPy 在 Python 中数组中对象的平均值
- c# - SemanticModel..GetSymbolInfo /GetDeclaredSymbol 返回 null
- java - 如何使用 Sinch 进行电话验证?
- node.js - 如何从 Node js 中的 post 请求中返回数据?
- matlab - 如何在 regionprops3 命令中识别微米单位的物体?
- typescript - 接口就像一个指针一样
- node.js - 在纯后端 NodeJS 应用程序中是否需要捆绑包?
- php - 查找具有动态键的数组值
- git - Git 克隆设置为原点,无法从远程存储库中读取