我真誠地希望以前有人問過這個問題,如果是這樣,我會很高興被投入到現有的執行緒中。
我的資料基本上包含有關由它們各自的開始和結束日期標記的幾個時間段的資訊。我想轉換這些資料,以便這些開始日期和結束日期之間的每個日期都是它自己的觀察結果,其中包含與時間范圍相關的所有資料。
到目前為止,我最好的猜測是為每一行使用一個 for 回圈,基本上為每個觀察創建一個新的 data.frame 并將它們全部縫合在一起。但是,我意識到這不是一種甚至是中等效率的方法,而且由于我正在使用的資料集往往相當大,我希望有一種性能更高的方法。
我希望沿著 tidyverse pivot_longer 的路線找到一種方法,因為在我看來它似乎有模糊的聯系。
原始資料與此示例類似:
data.frame(Location = c("Berlin", "Amsterdam"),
Value = c("A", "B"),
Starting = c("2001-01-01", "2001-01-08"),
Ending = c("2001-01-03", "2001-01-10"))
Location Value Starting Ending
1 Berlin A 2001-01-01 2001-01-03
2 Amsterdam B 2001-01-08 2001-01-10
理想的輸出看起來像這樣:
data.frame(Location = rep(c("Berlin", "Amsterdam"), each = 3),
Date = c("2001-01-01", "2001-01-02", "2001-01-03", "2001-01-08", "2001-01-09", "2001-01-10"),
Value = rep(c("A", "B"), each = 3))
Location Date Value
1 Berlin 2001-01-01 A
2 Berlin 2001-01-02 A
3 Berlin 2001-01-03 A
4 Amsterdam 2001-01-08 B
5 Amsterdam 2001-01-09 B
6 Amsterdam 2001-01-10 B
uj5u.com熱心網友回復:
我們可以unnest在創建一個list列之后seq
library(dplyr)
library(purrr)
library(tidyr)
df1 %>%
transmute(Location, Value, Date = map2(as.Date(Starting),
as.Date(Ending), seq, by = "1 day")) %>%
unnest(Date)
-輸出
# A tibble: 6 × 3
Location Value Date
<chr> <chr> <date>
1 Berlin A 2001-01-01
2 Berlin A 2001-01-02
3 Berlin A 2001-01-03
4 Amsterdam B 2001-01-08
5 Amsterdam B 2001-01-09
6 Amsterdam B 2001-01-10
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/514663.html
標籤:r日期蒂迪尔润滑
上一篇:如何創建由單個開始日期和結束日期限制的時變日期間隔變數
下一篇:如何更改df列條目的日期日期型別
