Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据日期差异创建一个新列_R_Date - Fatal编程技术网

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
更改为class
Date
根据
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")