如何将一个列中重复的弱日(来自不同年份)转换为一个新列,该列表示R中的周
大家好,我正在为我的R论文代码中的一个步骤而挣扎。我有一个从2019-01-01到2020-12-30的“日期”列,但是我有多个同一天的行条目。 我基本上想创建一个新的列,该列说明一年中的星期以及它所属的相应行条目。因为我有2年的时间,我希望这几周是累积的,所以2019年将有52周,2020年的第一周将是第53周,2020年的第二周将是第54周,以此类推。最后我应该有104个星期。 我的数据集有82个变量,但重要的变量如下:如何将一个列中重复的弱日(来自不同年份)转换为一个新列,该列表示R中的周,r,R,大家好,我正在为我的R论文代码中的一个步骤而挣扎。我有一个从2019-01-01到2020-12-30的“日期”列,但是我有多个同一天的行条目。 我基本上想创建一个新的列,该列说明一年中的星期以及它所属的相应行条目。因为我有2年的时间,我希望这几周是累积的,所以2019年将有52周,2020年的第一周将是第53周,2020年的第二周将是第54周,以此类推。最后我应该有104个星期。 我的数据集有82个变量,但重要的变量如下: date plays.id name 2019
date plays.id name
2019-01-01 123 "Sunflower - Spider Man"
2019-01-01 456 "Without me"
2019-01-01 678 "Fly High - Shaggy"
2019-01-02 3455 "WAP"
2019-01-02 789 "Thank u, next"
谢谢你的帮助 我的示例中的一些随机数据:
r <- function(x) {abs(round(rnorm(x, 1000, 50)))}
dates = rep(seq(from=as.Date("2019-01-01"),to=as.Date("2021-01-01"), by=1),each = 4)
df <- data.frame(date = dates, plays.id = r(length(dates)))
请阅读标签页顶部的信息,并使用
dput
和预期输出以及任何代码尝试提供输入。format(as.Date(“2019-01-01”),format=“%U”)
返回“00”
,表示这是一年中的第一周(以0为基础)。还有“%V”
和“%W”
,这取决于您的工作日偏好。所有这些都可以在?strtime
中找到(可能不是最直观的地方,但一旦您习惯了所有相关的函数,它会有一点意义)。这意味着格式(as.Date(yourdata$Date),format=“%U”)
将给出一个带“00”
到53的字符串“
,如果您愿意,您可以将设置为.integer
。从那里,你可以简单地调整你所处的年份。嘿@r2evans!谢谢你的提示,我查看了关于strtime的信息,它非常有用。我会将格式参数更改为%V。但我仍然存在一个问题,即当进入2020年时,R将看到一年的第一周为1,我希望为52(2019年的51周加上2020年的1周)。我使用了它,它成功了!感谢您的帮助如果问题回答了您的问题,请不要忘记将其标记为已解决:)
require(lubridate)
df$week = floor_date(df$date, unit = "weeks")
df$week = as.numeric(1 + (df$week - df$week[1])/7)
> df[1:5,]
date plays.id week
1 2019-01-01 1045 1
2 2019-01-01 974 1
3 2019-01-01 1007 1
4 2019-01-01 949 1
5 2019-01-02 966 1
> df[2000:2005,]
date plays.id week
2000 2020-05-14 1002 72
2001 2020-05-15 1020 72
2002 2020-05-15 1034 72
2003 2020-05-15 1003 72
2004 2020-05-15 941 72
2005 2020-05-16 980 72