我有一個包含字符和日期變數的資料集。我想在我的資料集中找到最小和最大的日期。
我正在嘗試使用 pmin 功能,但這似乎不起作用。一旦提取了最大和最小日期,我想創建一個資料集,它們之間有一系列日期。例如,如果最早的日期是 2021-02-01(來自新列),最近的日期是 2022-06-20(來自舊列),我想創建兩者之間的日期串列。
桌子:
| ID | 老的 | 新的 | 等級 |
|---|---|---|---|
| 001 | 不適用 | 2021-02-01 | 一個 |
| 002 | 不適用 | 2021-02-01 | 一個 |
| 003 | 不適用 | 2021-02-21 | 一個 |
| 004 | 不適用 | 2021-04-21 | 一個 |
| 005 | 不適用 | 2021-04-21 | 一個 |
| 006 | 不適用 | 2021-04-21 | 一個 |
| 006 | 2022-06-20 | 2021-04-21 | 乙 |
| 002 | 2021-08-10 | 2021-04-21 | 乙 |
| 003 | 2022-06-20 | 2021-05-01 | 乙 |
| 003 | 2022-06-20 | 2021-05-01 | 乙 |
| 003 | 2021-08-10 | 2021-05-21 | 乙 |
| 003 | 2021-08-10 | 2021-07-21 | 乙 |
格式化擴展資料中的變數:使用 str()
$ 舊:日期,格式:“2021-04-30” $ Id:字符 $ 新:日期,格式:“2021-02-03”“2021-02-03” $ New1:日期,格式:NA NA NA NA ... $ New2 :日期,格式:“2021-01-10” “2021-01-10” $ New3 :日期,格式:NA NA “2021-06-10” NA ... $ New4 :日期,格式: NA NA NA NA ... $ New5 : 日期, 格式: NA NA "2022-07-10" NA ...
uj5u.com熱心網友回復:
在 base R 中,您可以獲得這樣的日期范圍:
range(unlist(df[sapply(df, class) == "Date"]), na.rm = TRUE) |>
as.Date(origin = "1970-01-01")
#> [1] "2021-02-01" "2022-06-20"
解釋
要在資料框中僅使用“日期”類的列,您可以執行df[sapply(df, class) == "Date"]. 如果您使用unlist這些列,它們會形成一個向量,您可以從中獲取range(即最小值/最大值),確保排除NA值。
不幸的是,這些步驟從向量中洗掉了類屬性,因此您需要將其轉換回日期。
uj5u.com熱心網友回復:
與艾倫相同的基本思想,但保留類的方法:
do.call(range, Filter(\(x) inherits(x, "Date"), dat))
[1] "2022-06-22" "2022-08-07"
資料:
dat <- data.frame(a = Sys.Date() sample(50, 5),
b = letters[1:5],
c = Sys.Date() sample(50, 5),
d = runif(5))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494369.html
