R 根据日期差异创建一个新列
我有一个数据框,在这个数据框中,我必须根据两个日期的差异创建一个新列。例如:R 根据日期差异创建一个新列,r,date,R,Date,我有一个数据框,在这个数据框中,我必须根据两个日期的差异创建一个新列。例如: Col1 Col2 Col3 Date New_Column_Required A X A 01/01/2001 Wave1 B Y Q 01/01/2001 Wave1 C Z N 01/01/2001 Wave1 D W M 02/01/2001 Wave2 E Q V 02/01/2001 W
Col1 Col2 Col3 Date New_Column_Required
A X A 01/01/2001 Wave1
B Y Q 01/01/2001 Wave1
C Z N 01/01/2001 Wave1
D W M 02/01/2001 Wave2
E Q V 02/01/2001 Wave2
F R O 03/01/2001 Wave3
G S T 03/01/2001 Wave3
第二个日期-第一个日期应为第1波,第三个日期-第二个日期-第2波,依此类推。我面临的问题是,多个日期似乎无法计算。使用
dplyr
我们可以将Date
更改为classDate
,根据Date
排列它们,并从第一个值中减去Date
library(dplyr)
df %>%
mutate(Date = lubridate::dmy(Date)) %>%
arrange(Date) %>%
mutate(new_col = paste0("Wave", Date - first(Date) + 1))
#OR
#mutate(new_col = paste0("Wave", as.integer(as.factor(Date))))
# Col1 Col2 Col3 Date new_col
#1 A X A 2001-01-01 Wave1
#2 B Y Q 2001-01-01 Wave1
#3 C Z N 2001-01-01 Wave1
#4 D W M 2001-01-02 Wave2
#5 E Q V 2001-01-02 Wave2
#6 F R O 2001-01-03 Wave3
#7 G S T 2001-01-03 Wave3
基本R中的逻辑相同:
df$Date = as.Date(df$Date, "%d/%m/%Y")
df <- df[order(df$Date), ]
transform(df, new_col = paste0('Wave', Date - Date[1] + 1))
df$Date=as.Date(df$Date,“%d/%m/%Y”)
谢谢你,它起了很大的作用。一个小问题是,我的约会时间在7点之间。我的意思是这是每周的数据,所以不是得到第1波,第2波,等等,我得到的是第1波,第8波,第15波,差7。关于如何在函数中执行此操作,您有什么想法吗?我知道我可以使用gsub或str_replace替换它们,但我想知道是否可以在函数本身中进行替换。@ShivamSarin请尝试我的注释版本mutate(new_col=paste0(“Wave”,as.integer(as.factor(Date))
df <- structure(list(Col1 = c("A", "B", "C", "D", "E", "F", "G"), Col2 = c("X",
"Y", "Z", "W", "Q", "R", "S"), Col3 = c("A", "Q", "N", "M", "V",
"O", "T"), Date = c("01/01/2001", "01/01/2001", "01/01/2001",
"02/01/2001", "02/01/2001", "03/01/2001", "03/01/2001")), row.names = c(NA,
-7L), class = "data.frame")