Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中填写缺失的日期_R_Dataframe - Fatal编程技术网

在R中填写缺失的日期

在R中填写缺失的日期,r,dataframe,R,Dataframe,我想要一些关于分析所需的数据帧转换的帮助。我的数据由大量个人组成,他们有着所有的历史职业。“EX”是表示终止雇佣关系原因的代码。大概是这样的: id Date_start Date_end EX 13 "2001-02-01" "2001-05-30" A 13 "2002-03-01" "2010-06-02" B 14 ... ... ... id Date_start Date_end EX 13 "2001

我想要一些关于分析所需的数据帧转换的帮助。我的数据由大量个人组成,他们有着所有的历史职业。“EX”是表示终止雇佣关系原因的代码。大概是这样的:

id  Date_start    Date_end       EX
13  "2001-02-01"  "2001-05-30"   A
13  "2002-03-01"  "2010-06-02"   B
14  ...           ...
...
id  Date_start    Date_end       EX
13  "2001-02-01"  "2001-05-30"   A
13  "2001-05-31"  "2002-02-28"   A
13  "2002-03-01"  "2010-06-02"   B
14  ...           ...
...
所以我想做的是“填补空白”。这可能不容易,但更难,因为我希望它按id聚合,并且每一新行之前都应该有该行的EX值,如下所示:

id  Date_start    Date_end       EX
13  "2001-02-01"  "2001-05-30"   A
13  "2002-03-01"  "2010-06-02"   B
14  ...           ...
...
id  Date_start    Date_end       EX
13  "2001-02-01"  "2001-05-30"   A
13  "2001-05-31"  "2002-02-28"   A
13  "2002-03-01"  "2010-06-02"   B
14  ...           ...
...

我相信这个技巧会是某种滞后和聚合,但我完全迷路了。

这有点棘手,您可以主要使用
dplyr
包来进行操作,并使用
lubridate
包来转换日期格式(您可以使用
as.date()
当然可以,但是
润滑油(使其更容易)

1.创建您提供的示例数据

names <- c("id", "Date_start",    "Date_end",       "EX")
row1 <- c(13 , "2001-02-01" , "2001-05-30" ,  "A")
row2 <- c(13 , "2002-03-01" , "2010-06-02" ,  "B")


testdata <- rbind(row1,row2) %>% data.frame(stringsAsFactors = F)
row.names(testdata) <- NULL

names(testdata) <- names

testdata$Date_start <- testdata$Date_start %>% as_date()
testdata$Date_end <- testdata$Date_end %>% as_date()
testdata
4.将其与您的样本数据相结合,并按日期和状态进行排列

final <- rbind(testdata,new_data) %>% data.frame() %>% arrange(Date_start)
final
final%data.frame()%%>%arrange(开始日期)
最终的
你的最终结果如下


选择“2001-05-31”“2002-02-28”A的依据是什么?您是如何选择的?
“2002-02-28”?您好,我们的想法是在下一行的日期结束后一天开始,在下一行的日期开始前一天结束。我不太处理日期和时间,但我会探索
lubridate
包(它是
tidyverse
的一部分)。查看有关使用日期/时间对象的帮助。这不会给你一个即时的答案,但它可能会帮助你更轻松地处理数据,并最终为你提供解决它所需的工具。嗨,我无法让它工作,因为我在执行第2点时出现了以下错误。mutate_impl(.data,dots)中出错:列
F_ALTA
的长度必须为9(组大小)或1,而不是300。您可以在此处找到真实数据:F_ALTA是Date_start,F_BAJA是Date_end,IPF是id,CAUSA_BAJA是EXIt似乎分组不正确。当我添加更多id=14的行(3)时。我用你的例子重现了我的错误:mutate_impl(.data,dots)中的错误:Column
Date_start
必须是长度3(组大小)或1,而不是6。Hi Juan,我已经更新了新的_数据部分,可以再试一次。因此,你不需要在mutate中引用数据框。但是,mutate中的第一个参数创建了一个新的Date\u start,因此我不能在第二个参数中使用Date\u start。我已将这两个变量指定为Date_start1和Date_end1,并在以后进行修改。您好,非常感谢您的帮助,但我仍然遇到一些错误,我不明白为什么会发生这种情况。当我执行你的代码时,一切都很好,但是对于我的数据,它显示了以下错误。mutate_impl(.data,dots)中出错:无法将列
Date_start1
从数字转换为字符此处您可以使用我的数据(仅4列):
final <- rbind(testdata,new_data) %>% data.frame() %>% arrange(Date_start)
final