R 将聚合函数的输出重新排列到新表中

R 将聚合函数的输出重新排列到新表中,r,R,我有一个描述一些位置的数据集。我根据分类预测因子p,在某些位置聚合一些响应度量y。我将这种类型的数据帧作为输出 location<-c('site1','site1','site1','site2','site2','site3','site3','site3','site3') p<-c('A','B','C','A','B','A','B','C','D') y<-c(1,2,3,1,2,1,2,3,4) data.frame(location,p,y) locatio

我有一个描述一些位置的数据集。我根据分类预测因子p,在某些位置聚合一些响应度量y。我将这种类型的数据帧作为输出

location<-c('site1','site1','site1','site2','site2','site3','site3','site3','site3')
p<-c('A','B','C','A','B','A','B','C','D')
y<-c(1,2,3,1,2,1,2,3,4)

data.frame(location,p,y)

location
df1
tapply
可以做到这一点。第一个参数位于表体中,第二个参数指定行和列:

tapply(DF[[3]], DF[2:1], c)
给予:

   location
p   site1 site2 site3
  A     1     1     1
  B     2     2     2
  C     3    NA     3
  D    NA    NA     4
这也可以写成:

with(DF, tapply(y, data.frame(p, location), c))

多好的问题啊!我更喜欢这样做,因为它不需要安装软件包,但是当我运行此程序时,我会将列标题设为ABCD,将站点1-3设为第一列中的行。因为你为tapply编写的代码不是很直观-我不知道如何根据这里的内容重写上面的命令-它对我的目的没有用处。我重写了查询,将A、B、C、D作为行而不是列,添加了一些解释,还有一个可选的
tapply
表达式。这完全有效,但repsonse G.Grothendieck不需要安装软件包。
   location
p   site1 site2 site3
  A     1     1     1
  B     2     2     2
  C     3    NA     3
  D    NA    NA     4
with(DF, tapply(y, data.frame(p, location), c))