Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中使用多个数据帧按月创建矩阵_R_Dataframe_Ggplot2_Dplyr - Fatal编程技术网

如何在R中使用多个数据帧按月创建矩阵

如何在R中使用多个数据帧按月创建矩阵,r,dataframe,ggplot2,dplyr,R,Dataframe,Ggplot2,Dplyr,我在下面提到了八个数据帧: 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

我在下面提到了八个数据帧:

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

使用以上数据文件,我想逐个创建下面提到的矩阵,在这里我们只考虑第一个数据文件<代码> DFY1 < /COD>的日期和月份,其余的数据帧我们只匹配代码> ID 所需输出

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    

一种选择是将数据集放在
列表中

lst <- mget(paste0("DF_", 1:8))
或者从
zoo

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
如果缺少某些情况,则转换为指定了
级别的
因子
。对于测试,删除“DF_8”的某些行

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

lst$DF_8一个选项是将数据集放在
列表中

lst <- mget(paste0("DF_", 1:8))
或者从
zoo

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
如果缺少某些情况,则转换为指定了
级别的
因子
。对于测试,删除“DF_8”的某些行

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


lst$DF_8那么你试过什么了吗?请包括您所做的任何尝试,以及从中得到的任何警告/错误。@r2evans是的,我已尝试使用基于
ID
merge
创建此向量,而不是使用
nrow
创建所需向量。您创建了什么?这个问题的重点是让你展示你的代码,而不仅仅是谈论它。如果问题是代码中的一个简单语法错误,我们可以给出它工作所必需的内容,而不必给您一个完全不同的实现。但我也问,因为这不是一个“免费代码”服务;虽然这种情况确实会定期发生,但如果你认为你可以只提供你的说明并检索答案,这是不公平的。@r2evans我曾尝试创建向量,但无法最终确定最终方法,是的,提出这个问题的动机是,它将永远在那里,帮助那些为同样类型的数据集而奋斗的人。我正在尝试重新构造代码,并将在这里共享。那么您尝试过什么吗?请包括您所做的任何尝试,以及从中得到的任何警告/错误。@r2evans是的,我已尝试使用基于
ID
merge
创建此向量,而不是使用
nrow
创建所需向量。您创建了什么?这个问题的重点是让你展示你的代码,而不仅仅是谈论它。如果问题是代码中的一个简单语法错误,我们可以给出它工作所必需的内容,而不必给您一个完全不同的实现。但我也问,因为这不是一个“免费代码”服务;虽然这种情况确实会定期发生,但如果你认为你可以只提供你的说明并检索答案,这是不公平的。@r2evans我曾尝试创建向量,但无法最终确定最终方法,是的,提出这个问题的动机是,它将永远在那里,帮助那些为同样类型的数据集而奋斗的人。我正在尝试重新构造代码,并将在此处共享。我将如何使用
ID
获取
nrow
。由于我的数据集非常大,我不认为在列表中转换它会起作用。/@Rahulshah基于预期,我想你想知道有多少个'Jan-17',每个数据集中都有'Feb-17'等?@Rahulshah数据集有多大?不,我正在考虑'Jan-17'、'Feb-17'等。我只基于第一个数据帧,而不是使用
ID
匹配并从其他数据帧获得所需的数字。我如何使用
ID
获得
nrow
。因为我的数据集非常大,我不认为在列表中转换它会起作用。/@Rahulshah基于预期,我猜你想知道每个数据集中有多少个“1月17日”、“2月17日”等?@Rahulshah数据集有多大?不,我正在考虑“1月17日”,“2月17日”等仅基于第一个数据帧,而不是我使用
ID
匹配并从其他数据帧获取所需的数字。