我有一个如下所示的 data.frame:
我想构建一个可以捕获每个 ID 的 min(date1, date2, date3, date4) 的变量。我该怎么办?
我想知道两种情况:
date1, date2, date3, date4
。可以使用代码构建样本数据:
df <- structure(list(ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32), date1 = structure(c(1512432000, 1514937600,
1517788800, 1524009600, 1541721600, 1554336000, 1562803200, 1562889600,
1521504000, 1525392000, 1530576000, 1534291200, 1535414400, 1538697600,
1541548800, 1545091200, 1549238400, 1551916800, 1553644800, 1554076800,
1560384000, 1561420800, 1562716800, 1566432000, 1567555200, 1548979200,
1554508800, 1555372800, 1556236800, 1561939200, 1563926400, 1563926400
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), date2 = structure(c(1512777600,
1515283200, 1518134400, 1524355200, 1542067200, 1555459200, 1563148800,
1563580800, NA, 1525737600, 1530921600, 1534636800, 1535760000,
1539043200, 1541894400, 1545436800, 1549584000, 1552262400, 1553990400,
1554422400, 1560729600, 1561766400, 1563062400, 1566777600, 1567900800,
1549324800, 1554854400, 1555718400, 1556582400, 1562284800, 1564272000,
1564272000), class = c("POSIXct", "POSIXt"), tzone = "UTC"),
date3 = structure(c(1512777600, 1515283200, 1518134400, 1524355200,
1542067200, NA, 1563148800, 1563580800, 1521849600, 1525737600,
NA, NA, NA, NA, 1541894400, 1545436800, 1549584000, 1552262400,
1553990400, 1554422400, 1560729600, 1561766400, 1563062400,
1566777600, 1567900800, 1549324800, 1554854400, 1555718400,
1556582400, 1562284800, 1564272000, 1564272000), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), date4 = structure(c(NA, NA, NA,
NA, NA, 1555459200, NA, NA, NA, NA, NA, 1530921600, 1534636800,
1535760000, 1539043200, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA), class = c("POSIXct", "POSIXt"
), tzone = "UTC")), row.names = c(NA, -32L), class = c("tbl_df",
"tbl", "data.frame"))\
谢谢。
答案 0 :(得分:1)
也许你可以试试下面的data.table
代码
setDT(df)[,
min_date := as.Date(as.POSIXct(min(na.omit(unlist(.SD))), origin = "1970-01-01"), format = "%Y-%m-%d"),
ID,
.SDcols = patterns("^date")
]
给出
> df
ID date1 date2 date3 date4 min_date
1: 1 2017-12-05 2017-12-09 2017-12-09 <NA> 2017-12-05
2: 2 2018-01-03 2018-01-07 2018-01-07 <NA> 2018-01-03
3: 3 2018-02-05 2018-02-09 2018-02-09 <NA> 2018-02-05
4: 4 2018-04-18 2018-04-22 2018-04-22 <NA> 2018-04-18
5: 5 2018-11-09 2018-11-13 2018-11-13 <NA> 2018-11-09
6: 6 2019-04-04 2019-04-17 <NA> 2019-04-17 2019-04-04
7: 7 2019-07-11 2019-07-15 2019-07-15 <NA> 2019-07-11
8: 8 2019-07-12 2019-07-20 2019-07-20 <NA> 2019-07-12
9: 9 2018-03-20 <NA> 2018-03-24 <NA> 2018-03-20
10: 10 2018-05-04 2018-05-08 2018-05-08 <NA> 2018-05-04
11: 11 2018-07-03 2018-07-07 <NA> <NA> 2018-07-03
12: 12 2018-08-15 2018-08-19 <NA> 2018-07-07 2018-07-07
13: 13 2018-08-28 2018-09-01 <NA> 2018-08-19 2018-08-19
14: 14 2018-10-05 2018-10-09 <NA> 2018-09-01 2018-09-01
15: 15 2018-11-07 2018-11-11 2018-11-11 2018-10-09 2018-10-09
16: 16 2018-12-18 2018-12-22 2018-12-22 <NA> 2018-12-18
17: 17 2019-02-04 2019-02-08 2019-02-08 <NA> 2019-02-04
18: 18 2019-03-07 2019-03-11 2019-03-11 <NA> 2019-03-07
19: 19 2019-03-27 2019-03-31 2019-03-31 <NA> 2019-03-27
20: 20 2019-04-01 2019-04-05 2019-04-05 <NA> 2019-04-01
21: 21 2019-06-13 2019-06-17 2019-06-17 <NA> 2019-06-13
22: 22 2019-06-25 2019-06-29 2019-06-29 <NA> 2019-06-25
23: 23 2019-07-10 2019-07-14 2019-07-14 <NA> 2019-07-10
24: 24 2019-08-22 2019-08-26 2019-08-26 <NA> 2019-08-22
25: 25 2019-09-04 2019-09-08 2019-09-08 <NA> 2019-09-04
26: 26 2019-02-01 2019-02-05 2019-02-05 <NA> 2019-02-01
27: 27 2019-04-06 2019-04-10 2019-04-10 <NA> 2019-04-06
28: 28 2019-04-16 2019-04-20 2019-04-20 <NA> 2019-04-16
29: 29 2019-04-26 2019-04-30 2019-04-30 <NA> 2019-04-26
30: 30 2019-07-01 2019-07-05 2019-07-05 <NA> 2019-07-01
31: 31 2019-07-24 2019-07-28 2019-07-28 <NA> 2019-07-24
32: 32 2019-07-24 2019-07-28 2019-07-28 <NA> 2019-07-24
ID date1 date2 date3 date4 min_date