【问题标题】:Create a new column based on difference of dates根据日期差异创建新列
【发布时间】:2020-02-06 09:13:24
【问题描述】:

我有一个数据框,我必须在其中根据两个日期的差异创建一个新列。示例:

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

2nd date - 1st date 应该是 wave 1,3rd date - 2nd date Wave 2 等等。我面临的问题是因为多个日期似乎无法弄清楚。

【问题讨论】:

    标签: r date


    【解决方案1】:

    使用dplyr,我们可以根据DateDate 更改为Datearrange 类,并从first 值中减去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 <- 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")
    

    【讨论】:

    • 感谢它的魅力。不过有个小问题,我的日期在 7 之间。我的意思是它是每周数据,所以不是得到 wave1、wave2 等。我得到的是 wave1、wave8、wave 15,相差 7。关于如何在函数中这样做?我知道我可以使用 gsub 或 str_replace 替换它们,但想知道是否可以在函数本身中进行替换。
    • @ShivamSarin 试试我注释掉的版本mutate(new_col = paste0("Wave", as.integer(as.factor(Date))))
    猜你喜欢
    • 2019-05-17
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2018-02-03
    • 2020-11-19
    相关资源
    最近更新 更多