如何在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
匹配并从其他数据帧获取所需的数字。