gpt4 book ai didi

r - 如何添加季节性虚拟变量?

转载 作者:行者123 更新时间:2023-12-02 01:11:46 25 4
gpt4 key购买 nike

我想根据季度在我的 R data.table 中添加季节性虚拟变量。我看过多个例子,但我还没有能够解决这个问题。我对 R 的了解有限,所以我想知道您是否可以让我走上正轨。

我的 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) 使用dcastcutsub:

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 Q4
1: 15/37 17879 1 89515 0 0 1 0
2: 16/22 22690 2 119653 0 1 0 0
3: 16/30 8296 1 957892 0 0 1 0
4: 16/33 8296 6 882282 0 0 1 0
5: 16/34 8296 5 926037 0 0 1 0
6: 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) 使用cutsublapply:

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))][]

这给出了类似的结果。无需使用 dcast 进行转置,您只需检查其中一个四分之一标签是否在 Q 列中。


使用的数据:

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')

关于r - 如何添加季节性虚拟变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45010854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com