首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用不同列计算值之间的差异,并使用R计算有间隙的值

使用不同列计算值之间的差异,并使用R计算有间隙的值
EN

Stack Overflow用户
提问于 2019-03-01 10:12:04
回答 1查看 107关注 0票数 0

有没有人能帮我弄清楚如何根据我的月度数据来计算差值?例如,我想按年计算每口井在1-7月、2-8月、3-9月等期间的地下水数值差异。注意:在某些年份中,将会缺少一些月份。任何tidyverse解决方案都将受到欢迎。

代码语言:javascript
运行
复制
    Well  year month     value
   <dbl> <dbl> <fct>     <dbl>
 1   222  1995 February   8.53
 2   222  1995 March      8.69
 3   222  1995 April      8.92
 4   222  1995 May        9.59
 5   222  1995 June       9.59
 6   222  1995 July       9.70
 7   222  1995 August     9.66
 8   222  1995 September  9.46
 9   222  1995 October    9.49
10   222  1995 November   9.31
# ... with 18,400 more rows

df1 <- subset(df, month %in% c("February", "August"))
test <- df1 %>% 
  dcast(site + year + Well ~ month, value.var = "value") %>%
  mutate(Diff = February - August)

谢谢,

西蒙

EN

回答 1

Stack Overflow用户

发布于 2019-03-01 11:12:17

因此,我尝试制作一个数据集,并使用dplyr创建一个解决方案。最佳实践是包含生成样本数据集的方法,因此请在以后的问题中这样做。

代码语言:javascript
运行
复制
# load required library
library(dplyr)

# generate data set of all site, well, and month combinations
## define valid values
sites = letters[1:3]
wells = 1:5
months = month.name

## perform a series of merges 
full_sites_wells_months_set <- 
    merge(sites, wells) %>%
    dplyr::rename(sites = x, wells = y) %>% # this line and the prior could be replaced on your system with initial_tibble %>% dplyr::select(sites, wells) %>% unique() 
    merge(months) %>% 
    dplyr::rename(months = y) %>% 
    dplyr::arrange(sites, wells)

# create sample initial_tibble
## define fraction of records to simulate missing months
data_availability <- 0.8

initial_tibble <- 
    full_sites_wells_months_set %>% 
    dplyr::sample_frac(data_availability) %>% 
    dplyr::mutate(values = runif(nrow(full_sites_wells_months_set)*data_availability)) # generate random groundwater values

# generate final result by joining full expected set of sites, wells, and months to actual data, then group by sites and wells and perform lag subtraction
final_tibble <- 
    full_sites_wells_months_set %>% 
    dplyr::left_join(initial_tibble) %>% 
    dplyr::group_by(sites, wells) %>% 
    dplyr::mutate(trailing_difference_6_months = values - dplyr::lag(values, 6L))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54936999

复制
相关文章

相似问题

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