我的专栏中有一周的数字:
> merged.tables_d[,"Promo2SinceWeek"]
Promo2SinceWeek
1: NA
2: NA
3: NA
4: NA
5: NA
---
1017205: 22
1017206: 22
1017207: 22
1017208: 22
1017209: 22
例如,值22
应该是5
年中的> merged.tables_d[,"Promo2SinceWeek"]
Promo2SinceWeek
1: NA
2: NA
3: NA
4: NA
5: NA
---
1017205: 5
1017206: 5
1017207: 5
1017208: 5
1017209: 5
个月。
所以结果应该是这样的:
public class RedirectUnauthorizedRoles : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (this.AuthorizeCore(filterContext.HttpContext))
{
base.OnAuthorization(filterContext);
}
else
{
//Example if User is Valid then i will return 1 else it will return 0
var value = true ? "1" : "0";
filterContext.Result = new JsonResult()
{
Data = value
};
}
}
}
我该怎么办呢?
答案 0 :(得分:2)
我完全不确定下面的代码是否回答了这个问题,就像@www在评论中说的那样,这与年份有所不同,但这段代码确实得到了第5个月。
诀窍是创建一个基准日期,然后使用函数lubridate::week
设置周。
library(lubridate)
x <- ymd("2018-01-01")
week(x) <- 22
as.integer(format(x, "%m"))
#[1] 5
您可以将此代码作为一个函数,将其推广到其他年份。
getMonthFromWeek <- function(Week, Year = 2018){
x <- ymd(paste0(Year, "-01-01"))
week(x) <- Week
as.integer(format(x, "%m"))
}
getMonthFromWeek(22)
#[1] 5
答案 1 :(得分:2)
我会使用lubridate库,这使得处理日期更容易。
library(lubridate)
创建虚拟数据:
Promo2SinceWeek <- c(1, 3, 22, 45, 52)
df <- data.frame(Promo2SinceWeek)
返回月份:
month(lubridate::ymd("2017-01-01") + lubridate::weeks(df$Promo2SinceWeek - 1))
不是说lubridate :: ymd(&#34; 2017-01-01&#34;)指定您正在查看的一年中的第一周,在本例中为2017年。如果您的数据来自多年我建议编写一个函数,根据你的df中的另一列改变这个值。
答案 2 :(得分:1)
我同意@www和@RuiBarradas将Year
转换为月份需要Week
。
我发现base R
功能比lubridate
更强大,可以处理星期和星期的日期。
我使用%W
格式的strptime
处理UK
格式。 (Monday
作为一周的第一天)。或者,%U
可用于US
格式(Sunday
作为一周中的第一天)。
方法很简单。取Year
和Week
查找该年中该周数的第一天。一旦找到日期,就可以轻松找到月份。
#Data
merged.tables_d <- data.frame(sl = 1:6,
Promo2SinceWeek = c(4, 14, 22, 24, 30, 35))
# Add another column as month
merged.tables_d$month = as.character(as.Date(
paste(1,merged.tables_d$Promo2SinceWeek,"2018",sep = "/"),"%u/%W/%Y"),
"%m")
merged.tables_d
# sl Promo2SinceWeek month
#1 1 4 01
#2 2 14 04
#3 3 22 05
#4 4 24 06
#5 5 30 07
#6 6 35 08