我正在处理面板数据,例如df。因此,我有一个唯一的UserID(Uid),一个TimeVariable(TV)和我感兴趣的主要变量(MV,虚拟编码)。 每行代表一个独特的UiD电视组合。 现在,我想创建一个新变量(NV),该变量基本上计算直到电视播放时发生的事件数(MV = 1)。
接触点:我想要一个计数变量(NV),该变量基本上对每个时刻进行计数,直到事件MV = 1在该时刻(TV)发生的频率。
到目前为止,我只能按UserId对其进行汇总,而无法逐级递增。
df <- df %>% group_by(user_id) %>% mutate(NV=count_if(1,MV))
根据MV的每个用户ID将结果汇总给我
所以df看起来像:
UI TV MV
1 1 0
1 2 1
1 3 0
2 1 0
2 2 0
2 3 1
2 4 2
3 1 1
3 2 0
3 3 1
3 4 1
到目前为止,我的代码的结果是:
UI TV MV NV
1 1 0 1
1 2 1 1
1 3 0 1
2 1 0 2
2 2 0 2
2 3 1 2
2 4 2 2
3 1 1 3
3 2 0 3
3 3 1 3
3 4 1 3
我真正想要的是
UI TV MV NV
1 1 0 0
1 2 1 1
1 3 0 1
2 1 0 0
2 2 0 0
2 3 1 1
2 4 2 2
3 1 1 1
3 2 0 1
3 3 1 2
3 4 1 3
非常感谢您的帮助!
答案 0 :(得分:0)
我们可以python-setuptools 20.7.0-1
group_by
并取UI
的发生累计值
MV == 1
在基数R中,我们可以使用library(dplyr)
df %>%
group_by(UI) %>%
mutate(NV = cumsum(MV == 1))
# UI TV MV NV
# <int> <int> <int> <int>
# 1 1 1 0 0
# 2 1 2 1 1
# 3 1 3 0 1
# 4 2 1 0 0
# 5 2 2 0 0
# 6 2 3 1 1
# 7 2 4 2 1
# 8 3 1 1 1
# 9 3 2 0 1
#10 3 3 1 2
#11 3 4 1 3
ave
数据
with(df, ave(MV == 1, UI, FUN = cumsum))
#[1] 0 1 1 0 0 1 1 1 1 2 3