在r中使用暨用于面板数据
我有一个来自交易数据框的不平衡面板数据。我想创建一个可变平衡,该余额总和先前完成的交易,从而反映给定时期内钱包的平衡。
Head 40看起来像这样:
period uniqueid ethamount date dollvalue ispurchase isunrealgain Freq day holdingtime
1 1 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
2 2 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
3 3 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
4 4 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
5 5 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
6 6 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
7 7 1 0.29486577590755 2017-12-10 -126.56818565055676 1 0 3 641 134
8 8 1 0.12565359813650237 2018-03-29 -48.266060116193295 1 0 3 750 134
9 8 1 -0.13903051539510708 2018-04-23 89.55372588145032 0 0 3 775 134
10 9 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
11 10 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
12 1 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
13 2 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
14 3 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
15 4 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
16 5 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
17 6 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
18 7 2 0.151 2018-01-24 -160.5432 1 0 4 686 196
19 7 2 0.093 2018-02-07 -70.04574 1 0 4 700 196
20 8 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
21 9 2 -0.22047692 2018-08-08 78.36631644479999 0 0 4 882 196
22 10 2 0.087 2018-09-25 -19.056479999999997 1 0 4 930 196
23 1 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
24 2 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
25 3 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
26 4 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
27 5 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
28 6 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
29 7 3 2.4 2017-11-30 -1037.3039999999999 1 0 3 631 35
30 7 3 -1 2018-01-04 940 0 0 3 666 35
31 8 3 0.92 2018-03-04 -796.2876 1 0 3 725 35
32 9 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
33 10 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
34 1 4 0 <NA> 0 <NA> <NA> <NA> NA <NA>
35 2 4 0 <NA> 0 <NA> <NA> <NA> NA <NA>
36 3 4 0 <NA> 0 <NA> <NA> <NA> NA <NA>
37 4 4 0 <NA> 0 <NA> <NA> <NA> NA <NA>
38 5 4 0 <NA> 0 <NA> <NA> <NA> NA <NA>
39 6 4 0 <NA> 0 <NA> <NA> <NA> NA <NA>
40 7 4 0.43 2017-11-05 -127.12089999999999 1 1 4 606 210
简单地使用group_by并汇总不起作用,因为它仅输出一个值,但是我需要创建一个变量balance
,该 添加了先前行中的所有Ethamount值/code> by uniqueId
为了使相应的期间的钱包余额
我想做的事情会像这样看起来像这样,但是代码
paneldata2$balance <- paneldata2 %>%
group_by(uniqueid) %>%
mutate(cumsum(paneldata2$ethamount)) %>%
ungroup()
Error in `mutate_cols()`:
! Problem with `mutate()` input `..1`.
i `..1 = cumsum(paneldata2$ethamount)`.
i `..1` must be size 11 or 1, not 529476.
i The error occurred in group 1: uniqueid = 1.
不起作用另一种做我想做的事情或可以轻松修复此代码?
提前致谢
I have a unbalanced panel data from a dataframe of transactions. I want to create a variable balance that sums the previously made transactions and thus reflects the balance of the wallet in a given period.
Head 40 looks like this:
period uniqueid ethamount date dollvalue ispurchase isunrealgain Freq day holdingtime
1 1 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
2 2 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
3 3 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
4 4 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
5 5 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
6 6 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
7 7 1 0.29486577590755 2017-12-10 -126.56818565055676 1 0 3 641 134
8 8 1 0.12565359813650237 2018-03-29 -48.266060116193295 1 0 3 750 134
9 8 1 -0.13903051539510708 2018-04-23 89.55372588145032 0 0 3 775 134
10 9 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
11 10 1 0 <NA> 0 <NA> <NA> <NA> NA <NA>
12 1 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
13 2 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
14 3 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
15 4 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
16 5 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
17 6 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
18 7 2 0.151 2018-01-24 -160.5432 1 0 4 686 196
19 7 2 0.093 2018-02-07 -70.04574 1 0 4 700 196
20 8 2 0 <NA> 0 <NA> <NA> <NA> NA <NA>
21 9 2 -0.22047692 2018-08-08 78.36631644479999 0 0 4 882 196
22 10 2 0.087 2018-09-25 -19.056479999999997 1 0 4 930 196
23 1 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
24 2 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
25 3 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
26 4 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
27 5 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
28 6 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
29 7 3 2.4 2017-11-30 -1037.3039999999999 1 0 3 631 35
30 7 3 -1 2018-01-04 940 0 0 3 666 35
31 8 3 0.92 2018-03-04 -796.2876 1 0 3 725 35
32 9 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
33 10 3 0 <NA> 0 <NA> <NA> <NA> NA <NA>
34 1 4 0 <NA> 0 <NA> <NA> <NA> NA <NA>
35 2 4 0 <NA> 0 <NA> <NA> <NA> NA <NA>
36 3 4 0 <NA> 0 <NA> <NA> <NA> NA <NA>
37 4 4 0 <NA> 0 <NA> <NA> <NA> NA <NA>
38 5 4 0 <NA> 0 <NA> <NA> <NA> NA <NA>
39 6 4 0 <NA> 0 <NA> <NA> <NA> NA <NA>
40 7 4 0.43 2017-11-05 -127.12089999999999 1 1 4 606 210
Simply using group_by and summarize does not work because it only outputs one value, I need however to create a variable balance
that adds all the ethamount values from previous rows period
by uniqueid
in order to have the wallet balance for the respective period
What I am trying to do would look somethig like this, however that code does not work
paneldata2$balance <- paneldata2 %>%
group_by(uniqueid) %>%
mutate(cumsum(paneldata2$ethamount)) %>%
ungroup()
Error in `mutate_cols()`:
! Problem with `mutate()` input `..1`.
i `..1 = cumsum(paneldata2$ethamount)`.
i `..1` must be size 11 or 1, not 529476.
i The error occurred in group 1: uniqueid = 1.
Is there an alternative way of doing what I want or can this code easily be fixed?
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该以不同的方式编写一些功能,也许您想要以下内容:
输出:
You should write some functions differently, maybe you want this:
Output: