Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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_Date_Dplyr_Data Manipulation - Fatal编程技术网

在R中填写错过的日期

在R中填写错过的日期,r,date,dplyr,data-manipulation,R,Date,Dplyr,Data Manipulation,我有以下数据框: df <- structure(list(Jmbg = c("0402977385033", "0402977385033", "0402977385033", "0402977385033", "0402977385033", "0402977385033", "0402977385033", "0402977385033", "0402977385033", "0402977385033", "0402977385033", "0402977385033", "

我有以下数据框:

df <- structure(list(Jmbg = c("0402977385033", "0402977385033", "0402977385033", 
"0402977385033", "0402977385033", "0402977385033", "0402977385033", 
"0402977385033", "0402977385033", "0402977385033", "0402977385033", 
"0402977385033", "0402977385033", "0402977385033", "0402977385033", 
"0402977385033", "0402977385033", "0402977385033", "2607954335134", 
"2607954335134", "2607954335134", "2607954335134", "2607954335134"
), DatumOd = structure(c(11260, 11457, 11503, 11603, 11696, 11826, 
11875, 12013, 12043, 12133, 12225, 12225, 12317, 12408, 12499, 
13878, 14425, 16203, 10915, 11687, 12372, 13878, 15217), class = "Date"), 
    DatumDo = structure(c(11455, 11502, 11520, 11695, 11800, 
    11941, 12012, 12042, 12132, 12224, 12225, 12316, 12407, 12498, 
    13877, NA, NA, NA, 11686, 12371, 13877, NA, NA), class = "Date")), row.names = c(NA, 
-23L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), vars = list(
    Jmbg), drop = TRUE, indices = list(0:17, 18:22), group_sizes = c(18L, 
5L), biggest_group_size = 18L, .Names = c("Jmbg", "DatumOd", 
"DatumDo"), labels = structure(list(Jmbg = c("0402977385033", 
"2607954335134")), row.names = c(NA, -2L), class = "data.frame", vars = list(
    Jmbg), drop = TRUE, indices = list(c(0L, 2L, 3L, 4L, 5L, 
6L, 8L, 9L, 10L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 22L), 
    c(1L, 7L, 11L, 20L, 21L)), group_sizes = c(18L, 5L), biggest_group_size = 18L, .Names = "Jmbg"))
但是该id应该有下一个日期从
DatumOd
列开始,而不是测试。例如,对于最后一个“测试”,应该有日期2011-08-30。
当然,您可以使用任何其他包(data.table…

下面是使用
data.table
的答案。它使用
shift
函数查找每行的前导日期(减去一天),并按id将其分配给一个新列
dayBeforeNext
。然后,
ifelse
根据
DatumDo
中是否已有日期,将新日期分配给另一个新变量

在分配日期之前,我需要将日期转换为字符,然后再返回到日期,因为在
ifelse
语句中,通过引用
data.table
来分配日期类型似乎存在错误

setDT(df)
df[, dayBeforeNext := as.character(shift(DatumOd, type='lead')-1), by=Jmbg]
df[, DatumDo := as.character(DatumDo)]

df[, new := ifelse(is.na(DatumDo), dayBeforeNext, DatumDo)]

df[, new := as.Date(new)]

新的`data.table将有额外的列,因此您可以根据需要重新分配/删除这些列。

类似的内容?我认为这不是同一个问题,因为我必须使用来自两列的信息,而不是像您链接的示例中那样仅使用一列。无法在我的机器上复制此信息datees格式存在一些问题。我使用dplyr成功地找到了解决方案:
df_2%dplyr::group_by(Jmbg)%%>%dplyr::mutate(novi_date=ifelse(is.na(DatumDo)&DatumOd!=max(DatumOd),dplyr::lead(as.numeric(DatumOd),1L,order_by=as.numeric(DatumOd))-1,as.numeric(DatumDo)))%%>%dplyr::arrange(Jmbg,DatumOd)df_2$novi_在我的答案或我提到的问题中的日期格式存在问题?是的,如果我使用了您的代码,则日期格式存在一些问题。变量
DatumDo
小于
DatumOd
,即使我在换档功能中使用了超前而不是滞后。
setDT(df)
df[, dayBeforeNext := as.character(shift(DatumOd, type='lead')-1), by=Jmbg]
df[, DatumDo := as.character(DatumDo)]

df[, new := ifelse(is.na(DatumDo), dayBeforeNext, DatumDo)]

df[, new := as.Date(new)]