Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将一个列中重复的弱日(来自不同年份)转换为一个新列,该列表示R中的周_R - Fatal编程技术网

如何将一个列中重复的弱日(来自不同年份)转换为一个新列,该列表示R中的周

如何将一个列中重复的弱日(来自不同年份)转换为一个新列,该列表示R中的周,r,R,大家好,我正在为我的R论文代码中的一个步骤而挣扎。我有一个从2019-01-01到2020-12-30的“日期”列,但是我有多个同一天的行条目。 我基本上想创建一个新的列,该列说明一年中的星期以及它所属的相应行条目。因为我有2年的时间,我希望这几周是累积的,所以2019年将有52周,2020年的第一周将是第53周,2020年的第二周将是第54周,以此类推。最后我应该有104个星期。 我的数据集有82个变量,但重要的变量如下: date plays.id name 2019

大家好,我正在为我的R论文代码中的一个步骤而挣扎。我有一个从2019-01-01到2020-12-30的“日期”列,但是我有多个同一天的行条目。 我基本上想创建一个新的列,该列说明一年中的星期以及它所属的相应行条目。因为我有2年的时间,我希望这几周是累积的,所以2019年将有52周,2020年的第一周将是第53周,2020年的第二周将是第54周,以此类推。最后我应该有104个星期。 我的数据集有82个变量,但重要的变量如下:

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