- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 R 的新手。
我想要日期所属的月份的周数。
通过使用以下代码:
>CurrentDate<-Sys.Date()
>Week Number <- format(CurrentDate, format="%U")
>Week Number
"31"
最佳答案
问题概述
很难判断哪个答案有效,所以我构建了自己的函数 nth_week
并针对其他人进行了测试。
导致大多数答案不正确的问题是:
DATE Tori user206 Scri Klev Stringi Grot Frei Vale epi iso coni
Fri-2016-01-01 1 1 1 1 5 1 1 1 1 1 1
Sat-2016-01-02 1 1 1 1 1 1 1 1 1 1 1
Sun-2016-01-03 2 1 1 1 1 2 2 1 -50 1 2
Mon-2016-01-04 2 1 1 1 2 2 2 1 -50 -51 2
----
Sat-2018-12-29 5 5 5 5 5 5 5 4 5 5 5
Sun-2018-12-30 6 5 5 5 5 6 6 4 -46 5 6
Mon-2018-12-31 6 5 5 5 6 6 6 4 -46 -46 6
Tue-2019-01-01 1 1 1 1 6 1 1 1 1 1 1
# prep
library(lubridate)
library(tictoc)
kepler<- ymd(15711227) # Kepler's birthday since it's a nice day and gives a long vector of dates
some_dates<- seq(kepler, today(), by='day')
# test speed of Tori algorithm
tic(msg = 'Tori')
Tori<- (5 + day(some_dates) + wday(floor_date(some_dates, 'month'))) %/% 7
toc()
Tori: 0.19 sec elapsed
# test speed of Grothendieck algorithm
wk <- function(x) as.numeric(format(x, "%U"))
tic(msg = 'Grothendieck')
Grothendieck<- (wk(some_dates) - wk(as.Date(cut(some_dates, "month"))) + 1)
toc()
Grothendieck: 1.99 sec elapsed
# test speed of conighion algorithm
tic(msg = 'conighion')
weeknum <- as.integer( format(some_dates, format="%U") )
mindatemonth <- as.Date( paste0(format(some_dates, "%Y-%m"), "-01") )
weeknummin <- as.integer( format(mindatemonth, format="%U") ) # the number of the week of the first week within the month
conighion <- weeknum - (weeknummin - 1) # this is as an integer
toc()
conighion: 2.42 sec elapsed
# test speed of Freitas algorithm
first_day_of_month_wday <- function(dx) {
day(dx) <- 1
wday(dx)
}
tic(msg = 'Freitas')
Freitas<- ceiling((day(some_dates) + first_day_of_month_wday(some_dates) - 1) / 7)
toc()
Freitas: 0.97 sec elapsed
require(lubridate)
(5 + day(some_dates) + wday(floor_date(some_dates, 'month'))) %/% 7
# some_dates above is any vector of dates, like:
some_dates<- seq(ymd(20190101), today(), 'day')
nth_week<- function(dates = NULL,
count_weeks_in = c("month","year"),
begin_week_on = "Sunday"){
require(lubridate)
count_weeks_in<- tolower(count_weeks_in[1])
# day_names and day_index are for beginning the week on a day other than Sunday
# (this vector ordering matters, so careful about changing it)
day_names<- c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")
# index integer of first match
day_index<- pmatch(tolower(begin_week_on),
tolower(day_names))[1]
### Calculate week index of each day
if (!is.na(pmatch(count_weeks_in, "year"))) {
# For year:
# sum the day of year, index for day of week at start of year, and constant 5
# then integer divide quantity by 7
# (explicit on package so lubridate and data.table don't fight)
n_week<- (5 +
lubridate::yday(dates) +
lubridate::wday(floor_date(dates, 'year'),
week_start = day_index)
) %/% 7
} else {
# For month:
# same algorithm as above, but for month rather than year
n_week<- (5 +
lubridate::day(dates) +
lubridate::wday(floor_date(dates, 'month'),
week_start = day_index)
) %/% 7
}
# naming very helpful for review
names(n_week)<- paste0(lubridate::wday(dates,T), '-', dates)
n_week
}
# Example raw vector output:
some_dates<- seq(ymd(20190930), today(), by='day')
nth_week(some_dates)
Mon-2019-09-30 Tue-2019-10-01 Wed-2019-10-02
5 1 1
Thu-2019-10-03 Fri-2019-10-04 Sat-2019-10-05
1 1 1
Sun-2019-10-06 Mon-2019-10-07 Tue-2019-10-08
2 2 2
Wed-2019-10-09 Thu-2019-10-10 Fri-2019-10-11
2 2 2
Sat-2019-10-12 Sun-2019-10-13
2 3
# Example tabled output:
library(tidyverse)
nth_week(some_dates) %>%
enframe('DATE','nth_week_default') %>%
cbind(some_year_day_options = as.vector(nth_week(some_dates, count_weeks_in = 'year', begin_week_on = 'Mon')))
DATE nth_week_default some_year_day_options
1 Mon-2019-09-30 5 40
2 Tue-2019-10-01 1 40
3 Wed-2019-10-02 1 40
4 Thu-2019-10-03 1 40
5 Fri-2019-10-04 1 40
6 Sat-2019-10-05 1 40
7 Sun-2019-10-06 2 40
8 Mon-2019-10-07 2 41
9 Tue-2019-10-08 2 41
10 Wed-2019-10-09 2 41
11 Thu-2019-10-10 2 41
12 Fri-2019-10-11 2 41
13 Sat-2019-10-12 2 41
14 Sun-2019-10-13 3 41
关于R:如何获得当月的周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25199851/
我希望你能用一些代码来帮助我,它根据系统日期计算周数。 我有一个文本框 WeekNum ,我想显示 CommandButton1_Click 时的周数被激活。 我找到了有关如何从给定日期计算周数的文章
有没有一种好方法可以让年份+周数转换为R中的日期?我尝试了以下方法: > as.POSIXct("2008 41", format="%Y %U") [1] "2008-02-21 EST" > as
我有一个带有日期列的 mysql 表,我想以某种模式打印我的表,在同一列中,它应该将日期打印为日期(周号)或日期周号。 例如2014-06-05-第 22 周或 2014-06-05(第 22 周)。
我想以字符串格式从给定日期获取 ISO 周数,其中星期一是一周的第一天,包含一年中第一个星期四的那一周被认为是第一周。 从其他答案来看,我认为 strftime("2017-11-18", forma
我正在尝试创建一个脚本,该脚本在设定的时间段(上个月的 23 日和本月的 23 日)内获取工作日、日历日和工作日的计数。 我有以下脚本,我尝试使用 Worksheet Functions 但它不起作用
我确信我在这里忽略了一些非常基本的东西,但在查询和谷歌搜索大约一个小时后我无法理解它。 我已经有一个日期表了,如果有帮助的话。它填充了过去几年的日期,并通过服务器上的作业运行的存储过程每晚更新。 我需
如果在 MySQL 中只有星期几、周数、月份和年份,是否有某种方法可以获取日期? 例子: 我想知道这个参数是哪一天: 年份:2014 月份:9 月 (09) 一年中的周数:37 或 9 月的周数:3
我需要一个选择菜单(下拉菜单),其中周数为 1 到现在 + 10 周。所以我做了: week '.$x.'';
我有以下 Pandas 系列,想获得该日期的 GPS 周数: import pandas as pd from pandas import Timestamp times = pd.Series([T
我需要在我的自定义日历中设置事件,这些事件将根据选定的周期重复,即每天、每周、每月或每年。我有以毫秒为单位的开始和结束日期。 问题: 是否有任何日历或日期 API,我们可以从中计算两毫秒之间的天数、周
以下查询返回周号。 53,我认为 02-Jan-2017 是 2017 年第一周的开始。 SELECT TRUNC(CL_DT, 'IW') AS WK_STARTDATE, TRUNC
我有两个 datetime 对象;开始日期和结束日期。我需要枚举两者之间的天数、周数和月数,包括在内。 理想情况下,结果将采用 datetime 格式,但任何兼容的格式都可以。周和月由与周/月的第一天
我有一个简单的 SQL 用于计算 SQLite 报告中的周数 SELECT STRFTIME('%W', 'date_column') 2009-2012 年是正确的。在 2013 年,我总是得到错误
我有如下四个单元格,我想将它们组合在一个单元格中作为一个短日期: A1: Year A2: Month A3: Week number A4: Week day 现在我想要,Excel 查看上面的单元
如何确定 Windows 批处理文件中的 ( ISO 8601 ) 周数? 不幸的是WMIC PATH WIN32_LOCALTIME GET/FORMAT:LIST只有WeekInMonth...
我正在尝试从给定日期创建 N 周,并且周列表应排除属于该周的周。 例如,如果我给出今天的日期,那么我想生成排除本周的周数至 N 周。 下面是满足我的目的的示例,但我无法创建 N 周数,这段代码也打印当
我有一个 GPS 设备,可以将一些对象(包括 GPS 时间)发送到我的服务器。 它以周数的格式出现,秒到一周。 我想将其转换为日期时间格式。我为此找到了一些代码,但我发现的只是如何将周数转换为日期,不
我正在尝试编写一个函数来计算设备需要检查的下一个日期。我正在使用下面的代码(它不完整。) function get_next_check(){ $today = date(get_option
我有这样一个日期:171115 183130 (17-11-15 18:31:30)。我使用的 API 要求我根据周数提供日期,但由于它用于 GPS 服务,因此需要是从 1980 年(第一个纪元)开始
所以我正在为 Android 开发一个小的储蓄应用程序。我有三个我需要处理的值(value)观。我有每日储蓄金额的值(value),每月储蓄的值(value),以及年度储蓄的值(value)。然后我想
我是一名优秀的程序员,十分优秀!