将日期转换为该周的星期一

时间:2015-07-16 16:25:04

标签: r datetime

我发现这个公式可以将日期转换为该周的星期一:

x <- as.Date("2015-07-17")
y <- (x-c(6:0))[format((x-c(6:0)),"%w")=="1"]

我如何调整公式以便在一列日期中使用?

df <- data.frame(date = c("2014-08-09", "2014-08-10", "2014-08-11", "2014-11-04"))
df$date <- as.Date(df$date)
df$week <- (df$date-c(6:0))[format((df$date-c(6:0)),"%w")=="1"]

将抛出:

Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L,  : 
  invalid 'trim' argument

2 个答案:

答案 0 :(得分:6)

您可以使用此功能:

prevM <-function(x)
        7 * floor(as.numeric(x-1+4) / 7) + as.Date(1-4,origin = "1970-01-01")

然后

 prevM(as.Date(c("2015-07-17","2015-07-16","1974-02-10")))

将产生:

[1] "2015-07-13" "2015-07-13" "1974-02-04"

您可以在此处找到它:Previous Monday date

答案 1 :(得分:0)

试试这个

df <- data.frame(date = c("2014-08-09", "2014-08-10", "2014-08-11", "2014-11-04"))
df$date <- as.Date(df$date)

for(i in 1:dim(df)[1]){
  df$date[i] <- (as.Date(df$date[i])-c(6:0))[format((as.Date(df$date[i])-c(6:0)),"%w")=="1"]
}