首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用R中的多个数据按月创建矩阵

如何利用R中的多个数据按月创建矩阵
EN

Stack Overflow用户
提问于 2018-03-11 12:45:30
回答 1查看 287关注 0票数 0

下面我已经提到了八条数据:

代码语言:javascript
复制
DF_1

Date                    ID
2017-01-01 12:04:01     AB-1
2017-01-12 22:15:21     AB-2
2017-01-15 18:12:20     AB-3
2017-02-02 17:05:45     AB-4
2017-02-08 19:55:45     AB-5
2017-02-15 13:04:09     AB-6
2017-03-05 20:22:22     AB-7
2017-03-10 14:15:16     AB-8
2017-03-25 19:40:11     AB-9
2017-03-28 21:45:24     AB-10

DF_2

2017-01-01 12:04:01     AB-1
2017-01-12 22:15:21     AB-2
2017-01-15 18:12:20     AB-3
2017-02-02 17:05:45     AB-4
2017-02-08 19:55:45     AB-5
2017-02-15 13:04:09     AB-6
2017-03-05 20:22:22     AB-7
2017-03-10 14:15:16     AB-8
2017-03-25 19:40:11     AB-9

DF_3

2017-01-01 12:04:01     AB-1
2017-01-12 22:15:21     AB-2
2017-01-15 18:12:20     AB-3
2017-02-02 17:05:45     AB-4
2017-02-08 19:55:45     AB-5
2017-02-15 13:04:09     AB-6
2017-03-05 20:22:22     AB-7
2017-03-10 14:15:16     AB-8
2017-03-25 19:40:11     AB-9

DF_4

2017-01-01 12:04:01     AB-1
2017-01-12 22:15:21     AB-2
2017-01-15 18:12:20     AB-3
2017-02-02 17:05:45     AB-4
2017-02-08 19:55:45     AB-5
2017-02-15 13:04:09     AB-6
2017-03-05 20:22:22     AB-7
2017-03-10 14:15:16     AB-8
2017-03-25 19:40:11     AB-9

DF_5

2017-01-01 12:04:01     AB-1
2017-01-12 22:15:21     AB-2
2017-01-15 18:12:20     AB-3
2017-02-02 17:05:45     AB-4
2017-02-15 13:04:09     AB-6
2017-03-05 20:22:22     AB-7
2017-03-10 14:15:16     AB-8
2017-03-25 19:40:11     AB-9

DF_6

2017-01-01 12:04:01     AB-1
2017-01-12 22:15:21     AB-2
2017-01-15 18:12:20     AB-3
2017-02-02 17:05:45     AB-4
2017-02-15 13:04:09     AB-6
2017-03-05 20:22:22     AB-7
2017-03-25 19:40:11     AB-9

DF_7

2017-01-01 12:04:01     AB-1
2017-01-12 22:15:21     AB-2
2017-02-02 17:05:45     AB-4
2017-02-10 13:04:09     AB-6
2017-04-02 20:22:22     AB-7
2017-05-20 19:40:11     AB-9

DF_8

2017-01-01 12:04:01     AB-1
2017-02-12 22:15:21     AB-2
2017-03-02 17:05:45     AB-4
2017-03-15 13:04:09     AB-6
2017-04-05 20:22:22     AB-7
2017-05-25 19:40:11     AB-9

使用上面的数据,我想按月创建下面提到的矩阵,其中我们应该考虑第一个数据框架的日期和月份,对于其他数据帧,我们只匹配DF_1

所需输出

代码语言:javascript
复制
Month   DF_1  DF_2  DF_3  DF_4  DF_5  DF_6  DF_7  DF_8
Jan-17  3     3     3     3     3     3     2     2    
Feb-17  3     3     3     3     2     2     2     2
Mar-17  4     3     3     3     3     2     2     2    
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-11 12:56:58

一种选择是将数据集放在list中。

代码语言:javascript
复制
lst <- mget(paste0("DF_", 1:8))

如果“日期”不是Datetime类,则执行转换

代码语言:javascript
复制
lst <- lapply(lst, transform, Date = as.POSIXct(Date))

split 'Date‘列( 'lst1’)中提取的‘月份年’第一个数据集的'ID‘,循环遍历list,检查每个’lst1‘元素中有多少'ID’。

代码语言:javascript
复制
lst1 <- split(DF_1$ID, format(DF_1$Date, "%b-%y"))

或者使用来自zoozoo

代码语言:javascript
复制
lst1 <- split(DF_1$ID, zoo::as.yearmon(DF_1$Date))
sapply(lst, function(x) sapply(lst1, function(y) sum(x$ID %in% y)))
#          DF_1 DF_2 DF_3 DF_4 DF_5 DF_6 DF_7 DF_8
#Jan 2017    3    3    3    3    3    3    2    2
#Feb 2017    3    3    3    3    2    2    2    2
#Mar 2017    4    3    3    3    3    2    2    2

或者另一个选项是创建一个命名的vector,然后循环遍历list,匹配'ID‘列,然后获取table

代码语言:javascript
复制
nm1 <- setNames(as.yearmon(DF_1$Date), DF_1$ID)
sapply(lst, function(x) table(nm1[x$ID]))
#         DF_1 DF_2 DF_3 DF_4 DF_5 DF_6 DF_7 DF_8
#Jan 2017    3    3    3    3    3    3    2    2
#Feb 2017    3    3    3    3    2    2    2    2
#Mar 2017    4    3    3    3    3    2    2    2

如果缺少某些情况,则转换为指定为factorlevels。为了进行测试,删除“DF_8”中的一些行

代码语言:javascript
复制
lst$DF_8 <- lst$DF_8[1:2,]
sapply(lst, function(x) table(factor(nm1[x$ID], levels = as.character(unique(nm1)))))
#         DF_1 DF_2 DF_3 DF_4 DF_5 DF_6 DF_7 DF_8
#Jan 2017    3    3    3    3    3    3    2    2
#Feb 2017    3    3    3    3    2    2    2    0
#Mar 2017    4    3    3    3    3    2    2    0
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49220130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档