gpt4 book ai didi

r - 使用 dplyr 进行交互频率计数,必须包括零计数

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

我的问题涉及使用 R 中的 dplyr 包编写代码

我有一个相对较大的数据框(大约 500 万行),有 2 列:第一列包含单独标识符 (id),第二列包含日期 (date) >)。目前,每行指示在日期列中的日期发生的操作(由 id 列中的个人执行)。大约有 300,000 个独特的个体,以及大约 2600 个独特的日期。例如,数据的开头如下所示:

    id         date
John12 2006-08-03
Tom2993 2008-10-11
Lisa825 2009-07-03
Tom2993 2008-06-12
Andrew13 2007-09-11

我想 reshape 数据,以便为每个可能的 id x date 对保留一行,并添加一个额外的列来计算事件总数所列个人在给定日期发生的事件(可能取值为 0)。

我在 dplyr 包方面取得了一些成功,我用它来对数据中观察到的 id x 日期计数进行制表。

这是迄今为止我用来对 id x date 计数进行制表的代码:(我的数据框称为 df)

reduced = df %.% 
group_by(id, date) %.%
summarize(length(date))

我的问题是(正如我上面所说的)我想要一个数据集,其中还包含 0 表示没有任何关联操作的 id x 日期对。例如,如果在 2007 年 10 月 10 日没有观察到 John12 的操作,我希望输出返回该 id x date 对的行,并带有计数为 0。

我考虑过创建上面的框架,然后与空框架合并,但我相信一定有一个更简单的解决方案。任何建议非常感谢!

最佳答案

这是一个简单的选项,使用 data.table 代替:

library(data.table)

dt = as.data.table(your_df)

setkey(dt, id, date)

# in versions 1.9.3+
dt[CJ(unique(id), unique(date)), .N, by = .EACHI]
# id date N
# 1: Andrew13 2006-08-03 0
# 2: Andrew13 2007-09-11 1
# 3: Andrew13 2008-06-12 0
# 4: Andrew13 2008-10-11 0
# 5: Andrew13 2009-07-03 0
# 6: John12 2006-08-03 1
# 7: John12 2007-09-11 0
# 8: John12 2008-06-12 0
# 9: John12 2008-10-11 0
#10: John12 2009-07-03 0
#11: Lisa825 2006-08-03 0
#12: Lisa825 2007-09-11 0
#13: Lisa825 2008-06-12 0
#14: Lisa825 2008-10-11 0
#15: Lisa825 2009-07-03 1
#16: Tom2993 2006-08-03 0
#17: Tom2993 2007-09-11 0
#18: Tom2993 2008-06-12 1
#19: Tom2993 2008-10-11 1
#20: Tom2993 2009-07-03 0

在版本 1.9.2 或之前,等效表达式省略显式 by:

dt[CJ(unique(id), unique(date)), .N]

这个想法是创建所有可能的 iddate 对(这就是 CJ 部分的作用),然后将其合并返回,计算出现次数。

关于r - 使用 dplyr 进行交互频率计数,必须包括零计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23778195/

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