R如何根据数据库中的其他度量值填写缺少的日期 数据标题数据库尝试输入的代码

问题描述

在这里我有一个数据库,该数据库一个较大的数据库摘要,在该数据库中,我对怀基基湾或花沼湾所有实验单位(模块#)的珊瑚礁鱼类进行了普查。对于任何给定的采样周期(timestep),在同一日期对给定站点的所有模块进行了普查。我使用complete()来填写缺少普查数据的丢失值(例如,在模块普查期间未观察到鱼)。我正在尝试根据Site(Site_long)和timestep数据库填写日期。

数据标题

enter image description here

数据库

data <- structure(list(Date = structure(c(18244,18244,17503,17873,18309,18314,17977,17671,17311,18411,18050,17775,18154,17416,NA,NA),class = "Date"),Year = c(2019,2019,2017,2018,2020,2020),`Module #` = c(111,113,111,115,116,112,114,116),Site_long = c("Waikiki","Waikiki","Waikiki"),Shelter = c("High","High","Low","Low"),timestep = c("11","11","3","7","12","8","5","1","13","9","6","10","2","9"),total_biomass = c(0.0347972963845844,0.0491864247516633,0.0337429360353172,0.0676700712806197,0.0176129136061979,0.0463414029816723,0.0438269494805073,0.0540876987656689,0.013587464291258,0.00803709822823084,0.00467403151010407,0.0409256138571204,0.0620895115023818,0.0209695276260751,0.0204081680175056,0.00206199419933497,0.01080234898264,0.0316349973376856,0.00612831747253596,0.0025587897405708,0.00969619960291588,0.124762345913799,0.00202327772014947,0.00403651893214743,0.0316209605244676,0.016930666455176,0.0219387977347698,0.00121768478272671,0.0361091366626131,0.0122566349450719,0),Season = c("winter","winter","spring","summer","fall","summer")),row.names = c(NA,-288L),class = c("tbl_df","tbl","data.frame"))

为了根据来自同一Site和timestep的其他条目填充日期,我尝试使用complete()函数

尝试输入的代码

data <- data %>% 
  complete(Date,nesting(Site_long,timestep))

所需的输出应包含全部包含日期的行。应该填充“日期”,以便如果缺少该日期,则新的“日期”值应对应于对该给定“站点”和“时间步长”进行观测的日期。

例如,在标头数据中,您可以看到在timestep 10期间,怀基基的模块号111缺少日期的第一行。应填充日期,使其与在位置的任何模块号输入的日期匹配。威基基在timestep 10(2019-09-15)中。预先感谢您的输入!

解决方法

您可以通过DateModule #Site_long将没有丢失的TimeStep的行合并到原始数据中。

library(dplyr)

data %>%
  filter(!is.na(Date)) %>%
  select(Date,Site_long,TimeStep) %>%
  distinct(Site_long,TimeStep,.keep_all = TRUE) %>% 
  left_join(data,.,by = c("Site_long","TimeStep")) %>%
  mutate(Date = coalesce(Date.x,Date.y),.keep = "unused",.before = Year)