如何解决如何在R中输入值为0数据乱序的缺失日期行
我和我的伴侣有一个数据集,其中包含缺少的日期值。目标是在这些日期的总列中插入包含缺少的日期和站点的行以及一个0。
数据看起来像这样...
site type date total
A cat 2009-01-02 1
B cat 2009-01-02 1
A cat 2009-01-04 3
C cat 2009-01-04 1
B cat 2009-01-05 2
A cat 2009-01-06 1
B cat 2009-01-06 1
.
.
.
(And so on to the date of 2020-05-19 ...)
(所有数据的类型都相同)
我们希望它看起来像这样...
site type date total
A cat 2009-01-01 0
B cat 2009-01-01 0
C cat 2009-01-01 0
A cat 2009-01-02 1
B cat 2009-01-02 1
C cat 2009-01-02 0
A cat 2009-01-03 0
B cat 2009-01-03 0
C cat 2009-01-03 0
A cat 2009-01-04 3
B cat 2009-01-04 0
C cat 2009-01-04 1
A cat 2009-01-05 0
B cat 2009-01-05 2
C cat 2009-01-05 0
A cat 2009-01-06 1
B cat 2009-01-06 1
C cat 2009-01-06 0
.
.
.
(And so on to the date of 2020-05-19 ...)
我们尝试了一些建议给我们的不同代码变体,但是由于它仍然是R的新手,因此我们认为我们将其错误地应用于数据。到目前为止,我们尝试过的两种代码类型的示例是...
df%>%
mutate(date = as.Date(date))%>%
完成(网站,类型,日期= 2009-01-01:2020-05-19,填充=列表(总计= 0))%>%
安排(地点,日期)
和
df%>%
mutate(date1 = as.Date(date))%>%
group_by(site)%>%
complete(date1 = seq(min(date1),max(date1),by =“ 1 day”))%>%
填充(总计)%>%
选择(-date1)
我们仍然是新手,因此任何建议将不胜感激! 谢谢。
解决方法
您的第一个示例几乎是正确的,您只需要指定一些日期顺序即可。
开始设置:
library(tidyverse)
set.seed(pi)
start_date = as.Date("2009-01-01")
end_date = as.Date("2020-05-19")
创建一些演示数据进行测试:
df = expand_grid(site = LETTERS[1:3],type = "cat",date = seq.Date(start_date,end_date,by = "days")) %>%
mutate(total = sample(x = 0:3,size = n(),replace = T,prob = c(0.6,0.1,0.1))) %>%
# Randomly remove a bunch of rows.
slice(-sample(1:n(),size = 3000))
您的第一个示例几乎是正确的...您只需要使用seq.Date
而不是:
运算符来指定日期顺序。我没有包括您的mutate
行,因为此示例数据日期已采用Date
格式。
completed_df = df %>%
complete(site,type,by = "days"),fill = list(total = 0)) %>%
arrange(site,date)
,
以下是使用tidyverse软件包的选项:
library(dplyr)
library(tidyr)
# find all date and site combinations
all <- df %>%
mutate(date = as.Date(date)) %>%
expand(site,date = full_seq(date,1))
# merge back all date/site combinations to original data
df %>% right_join(all,by = c("date","site")) %>%
mutate(total = ifelse(is.na(total),total),type = "cat") %>%
arrange(date,site)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。