我在R中有原始数据帧(称为Raw),看起来像这样
SPECIES, SITE , StandType, unique_site_sp
<chr> <chr> <chr> <chr>
AMCR , A03 , A , A03AMCR
AMRE , A03 , A , A03AMRE
AMRE , A04 , A , A04AMRE
由此,我创建了一个数据框调用“ COMP”,它具有SPECIES的唯一值,空白列的列头和具有SITE的唯一值的列
这样制作
unique_site<-as.vector(unique(Raw$SITE))
unique_site
unique_sp<-as.vector(unique(Raw$SPECIES))
unique_sp
COMP<-data.frame(matrix(, nrow=length(unique_site), ncol=length(unique_sp)))
x <- c(unique_sp)
colnames(COMP) <- x
COMP<-cbind(COMP,unique_site)
COMP
COMP看起来像这样
AMCR, AMRE, unique_site
NA, NA , A03
NA, NA , A04
现在,我想通过引用Raw来填充COMP中的空白列。如果在RAW $ SPECIES = COMP 和中的cloumn名称,并且RAW $ SITE = COMP $ unique_site,则新数据框单元格将为1,否则将为0。
这会使COMP看起来像这样
AMCR, AMRE, unique_site
1, 1 , A03
1, 0 , A04
我对此并不熟悉,不确定从哪里开始。我已经尝试过了
for (i in 1:length(unique_site)) {
if(any(Raw$SPECIES == "AMCR") & (Raw$SITE=COMP$unique_site))
COMP[i,1] = 1
if(any(Raw$SPECIES == "AMRE") & (Raw$SITE=COMP$unique_site))
COMP[i,2] = 1
}
else {
COMP[i,j] = 0 }
答案 0 :(得分:0)
欢迎您!
我想您正在寻找dcast
。这里有两种解决方案:一种使用library(reshape2)
保留data.frame,另一种使用library(data.table)
可能更快(对于大型数据集有用):
library(reshape2)
Raw <- data.frame(stringsAsFactors=FALSE,
SPECIES = c("AMCR", "AMRE", "AMRE"),
SITE = c("A03", "A03", "A04"),
StandType = c("A", "A", "A"),
unique_site_sp = c("A03AMCR", "A03AMRE", "A04AMRE")
)
COMP <- dcast(Raw, SITE ~ SPECIES, fun.aggregate=length, value.var="SPECIES")
library(data.table)
Raw <- data.table(stringsAsFactors=FALSE,
SPECIES = c("AMCR", "AMRE", "AMRE"),
SITE = c("A03", "A03", "A04"),
StandType = c("A", "A", "A"),
unique_site_sp = c("A03AMCR", "A03AMRE", "A04AMRE")
)
COMPDT <- dcast.data.table(Raw, SITE ~ SPECIES, fun.aggregate=length, value.var="SPECIES")