好的,所以我有一个行数和44列的数据框。
为了制作热图,我正在尝试创建一个5 x 44的矩阵。
x = seq(1,5,1)
y = seq(1,44,1)
f = function(x, y) { r = mean(r01[r01$weekday == x,y]); r}
z = outer(x, y, f)
这就是我一直尝试做的事情,但是我遇到了一些错误:
Error in dim(robj) <- c(dX, dY) :
dims [product 220] do not match the length of object [1]
In addition: Warning messages:
1: In r01$weekday == p :
longer object length is not a multiple of shorter object length
2: In mean.default(r01[r01$weekday == p, q]) :
argument is not numeric or logical: returning NA
因此,在尝试消除这些错误时,我尝试了以下操作:
x = seq(1,5,1)
y = seq(1,44,1)
f = function(x,y){ r = x+y; r+1 }
z = outer(x, y, f)
哪个工作。现在,这是我的可重现示例的两倍:
hugs<-data.frame(replicate(44,sample(1:5,1000,rep=TRUE)))
x = seq(1,5,1)
y = seq(1,44,1)
f = function(x, y) { r = mean(hugs[hugs$x1 == x,y]); r}
z = outer(x, y, f)
失败,并且错误大致相同:
Error in dim(robj) <- c(dX, dY) :
dims [product 220] do not match the length of object [1]
In addition: Warning message:
In mean.default(hugs[hugs$X1 == x, y]) :
argument is not numeric or logical: returning NA
这使我大为困惑,因为我认为如果上面的那个行得通,这将行得通。因此,我不知道如何协调有效的方法和无效的方法。
我通过在运行其余内容之前用以下内容修改拥抱来重现“拥抱”版本中缺少的错误:
hugs$X1[hugs$X1 == 1,] <- 3
但是我实际上并不知道如何解决该错误,因为我的原始数据帧在工作日中的值是1:5,就像我的示例一样,它的值是44列,因此我只能误解其来源。不是说手段不存在:
for (i in x){
for (j in y){
print(mean(r01[r01$weekday == i,j]))}}
返回每个值。我想我可以重构我的上层逻辑以仅使用这两个循环,但是我想使用外部,因为它更有效(?)。
答案 0 :(得分:1)
多亏了这些评论,我决定不使用外部,而是使用了同样快速而简单的一个衬里:
aggregate(r01[1:44], r01["weekday"], mean)