我有一个描述某些位置的数据集。我根据分类预测器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中有一种简单的方法吗?
答案 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))