Plyr для подстановки данных домкрата - PullRequest
1 голос
/ 17 ноября 2011

Я пытаюсь запустить нож с помощью Plyr.У меня большой набор данных (715 сайтов за 10 лет).Я уже рассчитал богатство видов (количество всех присутствующих видов) в квадрате для каждого года, но теперь я хочу вычислить новые значения богатства после того, как выбрал один вид за раз и собрал их все в одном наборе данных.

Пример данных:

Site <- c(1,1,1,1,1,1)
Year <- c(96,96,96,97,97,97)
SpID <- c(1,2,3,1,2,3)
Count <- c(1,1,1,1,1,1)
data <- cbind(Site, Year, SpID)

Таким образом, в целом по Зоне 1 богатство видов составляет 3 в оба года.Если бы я хотел пересчитать это без одного из видов, то теперь было бы 2.

Я попытался использовать следующий код:

foo<-function(z){
    data2 <- subset(data, SpID != (z))
    summaryBy(Count~ Year + Site, 
              data = data2, 
              FUN = function(x) { c(l = length(x)) } )
}

richall<- ddply(data,.(SpID),foo)

Но яЯ явно ошибаюсь где-то!Есть мысли?

1 Ответ

1 голос
/ 17 ноября 2011

С вашими примерами данных и вызовом ddply вот что произойдет:

  • ddply найдет различные значения в столбце SpID вашего набора данных (1, 2 и 3).)
  • Затем будет создано data.frame для каждого из этих уникальных значений.
  • Каждый из этих data.frame s будет содержать только те строки, для которых SpID равен этому уникальному значению(так: a data.frame с первой и четвертой строками, одна со второй и пятой и одна с третьей и последней строками)
  • Теперь будет вызываться функция foo, передавая каждую из этих data.frame sодин за другим в качестве первого аргумента

Так что теперь совершенно очевидно, что это не поможет в изготовлении ножа.На самом деле я не вижу очевидного способа достичь этого с помощью plyr.В этом конкретном случае вам, вероятно, лучше оснастить себя подобной логикой.Что-то вроде:

listOfResults <- 
    lapply(unique(data$SpID), 
           function(curID) {
               curDF<-data[data^SpID!=curID,]
               summaryBy(...,data=curDF)
           })

Затем вы можете рекомбинировать свои результаты, например, ?do.call.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...