如何根据面板数据集中的某个值计算行数?

时间:2019-04-16 10:34:51

标签: r data-manipulation data-handling

我正在处理面板数据,例如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

非常感谢您的帮助!

1 个答案:

答案 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