我将数据存储为名为A,B,C,......
的数据帧集合if(number > max)
max = number;
if(number < min)
min = number;
注意:C用于表示空数据框
问题是建立一个像:
这样的矩阵A <- structure(list(Mes = c("Feb 2015", "Jun 2015", "Jul 2015", "Aug 2015", "Sep 2015", "Oct 2015", "Nov 2015"), Valor = c(73.98, 1013.21, 3209.38, 4168.41, 5233.48, 1313.83, 622.78)), .Names = c("Mes","Valor"), class = "data.frame", row.names = c("1", "2", "3","4", "5", "6", "7"))
B <- structure(list(Mes = c("Aug 2015", "Sep 2015", "Oct 2015"), Valor = c(1391.72, 761.15, 107.58)), .Names = c("Mes", "Valor"), class = "data.frame", row.names = c("1", "2", "3"))
C <- structure(list(Mes = c("Aug 2015"), Valor = c(0)), .Names = c("Mes", "Valor"), class = "data.frame", row.names = c("1"))
答案 0 :(得分:1)
我们可以将数据集放在list
中,使用rbindlist
中的data.table
创建单个data.table,然后重新设置“长”字样。广泛的&#39;使用dcast
library(data.table)#v1.9.6+
dcast(rbindlist(list(A,B))[, ind:= 1:.N, Mes], ind~Mes,
value.var='Valor', fill=0)
# ind Aug 2015 Feb 2015 Jul 2015 Jun 2015 Nov 2015 Oct 2015 Sep 2015
#1: 1 4168.41 73.98 3209.38 1013.21 622.78 1313.83 5233.48
#2: 2 1391.72 0.00 0.00 0.00 0.00 107.58 761.15
在devel版本即v1.9.7中,我们也可以使用rowid
创建序列列
dcast(rbindlist(list(A, B)), rowid(Mes)~Mes, value.var='valor', fill=0)
使用新数据集
DT <- rbindlist(list(A, B,C))[, ind:= 1:.N, Mes]
dcast(DT, ind~Mes, value.var='Valor', fill=0)
# ind Aug 2015 Feb 2015 Jul 2015 Jun 2015 Nov 2015 Oct 2015 Sep 2015
#1: 1 4168.41 73.98 3209.38 1013.21 622.78 1313.83 5233.48
#2: 2 1391.72 0.00 0.00 0.00 0.00 107.58 761.15
#3: 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00
如果我们需要matrix
输出,也可以使用base R
选项完成此操作。我们使用ave
创建序列列,然后使用xtabs
重新整形。
df1 <- transform(do.call(rbind, list(A, B)), ind= ave(seq_along(Mes), Mes, FUN=seq_along))
xtabs(Valor~ind+Mes, df1)
# Mes
#ind Aug 2015 Feb 2015 Jul 2015 Jun 2015 Nov 2015 Oct 2015 Sep 2015
# 1 4168.41 73.98 3209.38 1013.21 622.78 1313.83 5233.48
# 2 1391.72 0.00 0.00 0.00 0.00 107.58 761.15
A <- structure(list(Mes = c("Feb 2015", "Jun 2015", "Jul 2015", "Aug 2015",
"Sep 2015", "Oct 2015", "Nov 2015"), Valor = c(73.98, 1013.21,
3209.38, 4168.41, 5233.48, 1313.83, 622.78)), .Names = c("Mes",
"Valor"), class = "data.frame", row.names = c("1", "2", "3",
"4", "5", "6", "7"))
B <- structure(list(Mes = c("Aug 2015", "Sep 2015", "Oct 2015"), Valor = c(1391.72,
761.15, 107.58)), .Names = c("Mes", "Valor"), class = "data.frame", row.names = c("1",
"2", "3"))