楼主: wangzeo99
1545 8

[问答] R语言求解:迭代操作多个列表 [推广有奖]

  • 0关注
  • 0粉丝

初中生

90%

还不是VIP/贵宾

-

威望
0
论坛币
15 个
通用积分
0.3000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
251 点
帖子
12
精华
0
在线时间
16 小时
注册时间
2021-3-16
最后登录
2023-1-31

楼主
wangzeo99 学生认证  发表于 2021-3-18 11:22:24 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现有数据如下,一段时间内的不同观测点的观测值(表一)。
希望可以根据不同的net_id创建若干个时间序列,时间序列为该为该net_id对应的所有date和observation(如表二)。后续需要对这些序列进行相同的操作。                                                                                            date             net_id        observation                              
1        2017-05-01        2091            43
2        2017-05-01        2092            13
3        2017-05-01        2093           162
4        2017-05-01        2094            65
5        2017-05-01        2095            67
6        2017-05-01        2096             2
7        2017-05-01        2097             3
8        2017-05-01        2104             1
9        2017-05-02        2091            47
10        2017-05-02        2092            11
11        2017-05-02        2093             88
12        2017-05-02        2094             80
13        2017-05-02        2095             58
14        2017-05-02        2096             5
15        2017-05-03        2091             32
16        2017-05-03        2092             9
17        2017-05-03        2093            70
18        2017-05-03        2094             66
(表一)

比如下面这张图是挑选出net_id为2091所有数据(表二)。

              date              net_id    observation   

1        2017-05-01        2091             43
2        2017-05-02        2091             47
3        2017-05-03        2091             32
4        2017-05-04        2091             32
5        2017-05-05        2091             40
6        2017-05-06        2091             37
7        2017-05-07        2091             37
8        2017-05-08        2091             33
9        2017-05-09        2091             31
10        2017-05-10        2091             37
11        2017-05-11        2091             26
12        2017-05-12        2091             42
(表二)

本r语言小小白请求各位大神赐教:如何才能自动地创建出所有net_id对应的时间序列(如图二),以便于后续我可以对这些序列进行相同的操作,或者有其他的好方法?

总共的net_id共有两千多个,无法多次次手动创建。我已知晓如何凭借net_id创建一个序列,我想请教各位如何自动创建两千多个序列(或许是通过循环的方式从一个大表格中挑选数据,从而获得两千多个tibble对象?或者您有什么别的解决方法)?

或许用循环的方式filter不同的net_id并创建对应的序列?

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:R语言 observation observat ATION 时间序列 r语言 迭代 循环 数据框

沙发
owenqi 在职认证  学生认证  发表于 2021-3-18 12:22:02
你可以使用dplyr里面的group_by命令配合net_id,这样这个数据就是按照net_id排序了。
或者你也可以用基础包里面的subset命令,以net_id来作为分类,这样每个net_id就是一个对应的sublist了

藤椅
wangzeo99 学生认证  发表于 2021-3-18 13:24:07
owenqi 发表于 2021-3-18 12:22
你可以使用dplyr里面的group_by命令配合net_id,这样这个数据就是按照net_id排序了。
或者你也可以用基础 ...
好的谢谢您 我先试一下

板凳
wangzeo99 学生认证  发表于 2021-3-18 13:48:01
owenqi 发表于 2021-3-18 12:22
你可以使用dplyr里面的group_by命令配合net_id,这样这个数据就是按照net_id排序了。
或者你也可以用基础 ...
我试了您的方法,数据可以根据net_id进行排列,如下图
           date            net_id  observation
1        2017-07-25        16        1
2        2017-08-16        16        1
3        2017-06-24        43        1
4        2017-07-31        43        1
5        2017-10-06        78        1
6        2017-08-14        108        3
7        2017-10-06        108        1
8        2017-10-25        110        1
9        2017-05-14        111        1
10        2017-05-13        112        1
11        2017-07-01        112        1
12        2017-05-28        114        1
13        2017-10-03        114        1
14        2017-10-15        114        1
15        2017-07-07        117        1
16        2017-10-19        117        2
subset确实可以创建一个子集,我想请教您如何自动创建n个子集,而不是多次手动subset一个子集。因为net_id共有两千多个

报纸
llb_321 在职认证  发表于 2021-3-18 14:23:16
你的原始数据已经是一个很tidy的数据表了,大多数操作都可以基于你的原始数据实现,不晓得后续需要何种操作,非要把一个很好的原数据拆分开来?
作个比喻啊,酿酒的师傅费了那么大劲把葡萄酒里的糖份除掉了,而偏偏有同学喝酒时要兑上可乐。

地板
wangzeo99 学生认证  发表于 2021-3-18 14:36:55 来自手机
llb_321 发表于 2021-3-18 14:23
你的原始数据已经是一个很tidy的数据表了,大多数操作都可以基于你的原始数据实现,不晓得后续需要何种操作 ...
您好,谢谢回复。我后续的操作需要对“凭借net_id所建立的时间序列”进行分解。也就是说不同的net_id对应不同的序列,这就需要建立若干个时间序列,再对序列进行分析,得到不同的结果。请问您有什么建议吗?

7
llb_321 在职认证  发表于 2021-3-18 19:00:13
你的思路是把数据按ID分成2000多个单独的子集,然后用循环对子集进行分析。形象地理解,可能是这样的,把蛋糕切开,然后对每块蛋糕分析成分味道。而事实上,我们不需要把蛋糕切开,也是可以对蛋糕的不同部分进行分析的。
你需要做时间序列分析,大概是数据趋势、波动、AR、MA、不同序列的比较之类的操作吧。是要转成标准的时间序列吗,比如说ts对象、zoo类数据,这种操作稍微麻烦一点。有些操作实际上也不需要把数据转成ts对象。
用tidyr::spread(),可以把你的原始数据变成面板数据,spread(data, date, observation), 大概是这样吧,每一行是一个ID的不同时点的观察值。我做分析的电脑这两天驾崩了,所以没验证代码,你试试吧。看看变身后是否有不同的想法。

8
wangzeo99 学生认证  发表于 2021-3-18 19:03:14 来自手机
llb_321 发表于 2021-3-18 19:00
你的思路是把数据按ID分成2000多个单独的子集,然后用循环对子集进行分析。形象地理解,可能是这样的,把蛋 ...
好的,太感谢您的回答了!!

9
llb_321 在职认证  发表于 2021-3-18 19:07:56
而且,真要拆成2000多个对象,再用循环对这些对象操作,电脑也受不了啊。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-21 11:23