当库仑和行共享值时,如何用来自另一个数据帧的参考数据填充数据帧?

时间:2018-11-20 23:23:09

标签: r dataframe

我在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 }

1 个答案:

答案 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")