【发布时间】:2020-06-27 06:49:24
【问题描述】:
我需要 R 脚本方面的帮助。
我有一个如下所示的表格:
> dput(first)
structure(list(Date = structure(c(1438387200, 1441065600, 1456790400,
1459468800, 1462060800, 1464739200, 1467331200, 1470009600, 1472688000,
1475280000, 1477958400, 1480550400, 1483228800, 1485907200, 1488326400,
1491004800, 1493596800, 1464739200, 1467331200, 1470009600, 1472688000,
1475280000, 1477958400, 1480550400, 1483228800, 1517443200, 1519862400,
1522540800, 1525132800, 1527811200, 1530403200, 1533081600, 1535760000,
1538352000, 1541030400), class = c("POSIXct", "POSIXt"), tzone = "UTC"),
ID = c("A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1",
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A2", "A2", "A2",
"A2", "A2", "A2", "A2", "A2", "A2", "A3", "A3", "A3", "A3",
"A3", "A3", "A3", "A3", "A3", "A3"), flag = c(0, 0, 0, 1,
0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0)), row.names = c(NA, -35L
), class = c("tbl_df", "tbl", "data.frame"))
我需要改变表,例如,如果从上次 flag ==1(每笔贷款)到再次为 1 的时间少于 5 个月,则应将零替换为 1,否则为保持原样。
输出看起来像这样:
> dput(second)
structure(list(Date = structure(c(1438387200, 1441065600, 1456790400,
1459468800, 1462060800, 1464739200, 1467331200, 1470009600, 1472688000,
1475280000, 1477958400, 1480550400, 1483228800, 1485907200, 1488326400,
1491004800, 1493596800, 1464739200, 1467331200, 1470009600, 1472688000,
1475280000, 1477958400, 1480550400, 1483228800, 1517443200, 1519862400,
1522540800, 1525132800, 1527811200, 1530403200, 1533081600, 1535760000,
1538352000, 1541030400), class = c("POSIXct", "POSIXt"), tzone = "UTC"),
ID = c("A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1",
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A2", "A2", "A2",
"A2", "A2", "A2", "A2", "A2", "A2", "A3", "A3", "A3", "A3",
"A3", "A3", "A3", "A3", "A3", "A3"), flag = c(0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0)), row.names = c(NA, -35L
), class = c("tbl_df", "tbl", "data.frame"))
坦率地说,我不知道从哪里开始,我对 R 有点陌生。
【问题讨论】:
-
我刚刚用dput编辑过,非常感谢!
-
或许,试试
first %>% filter(as.logical(flag)) %>% group_by(ID) %>% group_by(grp = cumsum(interval(lag(Date, default = first(Date)), Date) %/% months(1) > 5), .add = TRUE) %>% complete(Date = seq(first(Date), last(Date), by = '1 month'), fill = list(flag = 1)) %>% ungroup %>% select(-grp) %>% right_join(first, by = c("ID", "Date")) %>% arrange(ID, Date) %>% transmute(flag = coalesce(flag.x, flag.y)) -
标志的“A2”值是否有错字?即
2017-01-01 A2infirst? -
我的意思是,第一个是 0,但我发现第二个是 1
-
是的,实际上,我认为您的输出是正确的!非常感谢!1