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

时间:2014-06-19 22:50:13

标签: 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)

我想要的是一个看起来像这样的数据框

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

data.frame(p,site1,site2,site3)

在R中有一种简单的方法吗?

2 个答案:

答案 0 :(得分:4)

df1 <- data.frame(location,p,y)
library(reshape2)
dcast(df1, p ~ location, value.var = "y")

##   p site1 site2 site3
## 1 A     1     1     1
## 2 B     2     2     2
## 3 C     3    NA     3
## 4 D    NA    NA     4

答案 1 :(得分:2)

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))