Как заполнить фрейм данных ссылочными данными из другого фрейма данных, когда значения столбцов и строк совместно используются? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть необработанный кадр данных (называемый Raw) в R, который выглядит таки столбец с уникальными значениями из 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

Теперь я хочу заполнить пустые столбцы вCOMP путем ссылки на Raw.Если в RAW $ SPECIES = имя ошибки в COMP И 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 голосов
/ 21 ноября 2018

Добро пожаловать на SO!

Я думаю, вы ищете 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...