楼主: 共享心跳
1677 0

[编程问题求助] 季节性虚拟变量(Seasonal+Dummy+Variables) [推广有奖]

  • 0关注
  • 5粉丝

已卖:47份资源

讲师

13%

还不是VIP/贵宾

-

威望
0
论坛币
1771 个
通用积分
365.7331
学术水平
20 点
热心指数
21 点
信用等级
20 点
经验
4164 点
帖子
211
精华
0
在线时间
117 小时
注册时间
2022-3-10
最后登录
2023-11-27

楼主
共享心跳 发表于 2022-3-18 10:14:56 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如何添加季节性虚拟变量

假设现在有这样一份 data.table:


Year_week  artist_id  number_of_events number_of_streams
   1:     16/30    8296         1            957892   2:     16/33    8296         6            882282   3:     16/34    8296         5            926037   4:     16/35    8296         2            952704   5:     15/37    17879        1             89515   6:     16/22    22690        2            119653
添加季节性虚拟变量以转换为如下格式:
Year_week  artist_id  number_of_events number_of_streams Q2 Q3 Q4   1:     16/50    8296         1            957892        0  0  1


两种方法:

1)使用dcast , cut和sub :

dcast(DT[, Q := cut(as.integer(sub('.*/','',Year_week)),                    breaks = c(0,13,26,39,53),                    labels = paste0('Q',1:4))],      Year_week + artist_id + number_of_events + number_of_streams ~ Q,      value.var = 'Q',      drop = c(TRUE,FALSE),      fun = length)

得到:

   Year_week artist_id number_of_events number_of_streams Q1 Q2 Q3 Q41:     15/37     17879                1             89515  0  0  1  02:     16/22     22690                2            119653  0  1  0  03:     16/30      8296                1            957892  0  0  1  04:     16/33      8296                6            882282  0  0  1  05:     16/34      8296                5            926037  0  0  1  06:     16/35      8296                2            952704  0  0  1  0

这是做什么的:


      
  • as.integer(sub('.*/','',Year_week))从Year_week列中获取周数
      
  • 使用cut您可以使用适当的标签将其划分为四分之一(另请参阅?cut )
      
  • 使用dcast您可以将四分之一列转换为具有聚合函数( length )的宽格式。 通过在dcast函数中使用drop = c(TRUE,FALSE) ,可以确保包含所有季度。

笔记:


      
  • Q列是一个有序因子,因此您也可以使用它来排列和过滤数据。
      
  • 根据虚拟列的使用情况:您并不总是需要这些。 当您想将它们用作分组或过滤变量时,您可以使用Q变量。
      
  • 但是,一些统计测试需要虚拟变量(证明dcast步骤是合理的)。

2)使用cut , sub和lapply :

DT[, Q := cut(as.integer(sub('.*/','',Year_week)),              breaks = c(0,13,26,39,53),              labels = paste0('Q',1:4))   ][, paste0('Q',1:4) := lapply(paste0('Q',1:4), function(q) as.integer(q == Q))][]

这给出了类似的结果。 您只需检查其中一个季度标签是否在Q dcast ,而不是使用dcast进行转置。


使用数据:

DT <- fread(' Year_week  artist_id  number_of_events number_of_streams     16/30    8296         1            957892     16/33    8296         6            882282     16/34    8296         5            926037     16/35    8296         2            952704     15/37    17879        1             89515     16/22    22690        2            119653')
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Variables Variable seasonal Eason Dummy

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-17 15:58