我目前在数据表中使用 R 并且有两个日期列(first_day 和 last_day),我需要将它们合并到一个日期列(日期)中。需要这样做,以便列具有按组 (id) 从最小到最大的日期。
这是我正在使用的数据:
ID first_day last_day
1 1/12/2005 1/15/2005
2 2/15/2006 2/19/2006
2 3/8/2006 3/12/2006
3 1/9/2008 1/13/2008
Run Code Online (Sandbox Code Playgroud)
这是我试图让结果看起来像的内容:
ID first_day last_day Date
1 1/12/2005 1/15/2005 1/12/2005
1 1/12/2005 1/15/2005 1/15/2005
2 2/15/2006 2/19/2006 2/15/2006
2 2/15/2006 2/19/2006 2/19/2006
2 3/8/2006 3/12/2006 3/8/2006
2 3/8/2006 3/12/2006 3/12/2006
3 1/9/2008 1/13/2008 1/9/2008
3 1/9/2008 1/13/2008 1/13/2008
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助!
out <- df[rep(1:nrow(df), each = 2),] # repeat each row
out$Date <- with(df, c(rbind(first_day, last_day))) # interlace two columns
# or out$Date <- with(out, ifelse(seq_along(first_day) %% 2, first_day, last_day))
out
# ID first_day last_day Date
# 1 1 1/12/2005 1/15/2005 1/12/2005
# 1.1 1 1/12/2005 1/15/2005 1/15/2005
# 2 2 2/15/2006 2/19/2006 2/15/2006
# 2.1 2 2/15/2006 2/19/2006 2/19/2006
# 3 2 3/8/2006 3/12/2006 3/8/2006
# 3.1 2 3/8/2006 3/12/2006 3/12/2006
# 4 3 1/9/2008 1/13/2008 1/9/2008
# 4.1 3 1/9/2008 1/13/2008 1/13/2008
Run Code Online (Sandbox Code Playgroud)
或者
library(data.table)
setDT(df)
df[, .(Date = c(first_day, last_day)), by = .(ID, first_day, last_day)]
# ID first_day last_day Date
# 1: 1 1/12/2005 1/15/2005 1/12/2005
# 2: 1 1/12/2005 1/15/2005 1/15/2005
# 3: 2 2/15/2006 2/19/2006 2/15/2006
# 4: 2 2/15/2006 2/19/2006 2/19/2006
# 5: 2 3/8/2006 3/12/2006 3/8/2006
# 6: 2 3/8/2006 3/12/2006 3/12/2006
# 7: 3 1/9/2008 1/13/2008 1/9/2008
# 8: 3 1/9/2008 1/13/2008 1/13/2008
Run Code Online (Sandbox Code Playgroud)