在R中填写缺失的日期
我想要一些关于分析所需的数据帧转换的帮助。我的数据由大量个人组成,他们有着所有的历史职业。“EX”是表示终止雇佣关系原因的代码。大概是这样的:在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
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)中的错误:ColumnDate_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