R: Поиск шаблонов по нескольким столбцам - возможно, дублирован ()? - PullRequest
2 голосов
/ 10 ноября 2010

Я пытаюсь изолировать записи в кадре данных, которые имеют общие значения: см. Ниже, чтобы восстановить часть моего df:

Stand<-c("MY","MY","MY","MY","MY")
Plot<-c(12,12,12,12,12)
StumpNumber<-c(1,2,3,3,7)
TreeNumber<-c(1,2,3,4,8)
sample<-data.frame(Stand,Plot,StumpNumber,TreeNumber)
sample

и получить вывод, который сообщает мне, какие записи имеют общие значения.Другими словами, для быстрой изоляции ситуаций, когда существует более одного TreeNumber (или более одной строки) для данной комбинации Stand, Plot, StumpNumber.В приведенном примере кода StumpNumber 3 имеет TreeNumber 3 и TreeNumber 4.

Мое понимание функции duplicated () состоит в том, что можно найти случаи, когда дублированные значения встречаются в одном столбце, - что можно сделать, чтобы найти ситуациигде встречается общая комбинация столбцов?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 10 ноября 2010

Описание ?duplicated указывает, что оно работает со строками data.frames, а в четвертом абзаце раздела Details указано:

 The data frame method works by pasting together a character
 representation of the rows separated by ‘\r’, so may be imperfect
 if the data frame has characters with embedded carriage returns or
 columns which do not reliably map to characters.

Как вы поняли, что он работает только на отдельных столбцах?

Предполагая, что TreeNumber уникален в Stand, Plot и StumpNumber, вам просто нужно исключить его из вызова на duplicated.

> duplicated(sample[,1:3])
[1] FALSE FALSE FALSE  TRUE FALSE
> duplicated(sample[,1:3], fromLast=TRUE)
[1] FALSE FALSE  TRUE FALSE FALSE

Обновление - если вам нужны все дублированные строки, вы можете сделать что-то вроде:

> allDups <- duplicated(sample[,1:3],fromLast=TRUE) | duplicated(sample[,1:3])
> sample[allDups,]
  Stand Plot StumpNumber TreeNumber
3    MY   12           3          3
4    MY   12           3          4
0 голосов
/ 11 ноября 2010

Для удобства я собираюсь предположить, что у вас есть схема вложенности.Итак, скажем, Trees вложены в Stumps, Stumps в Plots и Plots в Stands.Я также предположил, что проблема, которую вы пытаетесь решить, состоит в том, что некоторые деревья прикреплены к одному и тому же пню, что означает, что проблемные записи - это те, где идентификаторы Stand / Plot / Stump повторяются для разных TreeNumber s

То, что я сделал, было:

  • Упорядочить данные
  • Оберните слегка настроенную функцию вокруг duplicated()
  • Используйте ddply()plyr пакет) для разделения и анализа ваших данных
  • Распечатайте проблемные записи

Заказ данных

Я заказал сначала по Stand, затемPlot и, наконец, StumpNumber

    sampleOrdered <- sample[order(sample$Stand, sample$Plot, sample$StumpNumber)]

Завершение моей собственной duplicated() функции

Если предположить, что некоторые деревья прикреплены к одному пню, мы можем написать следующеефункция:

    findTreesAttachedToTheSameStump <- function(data) {
        x <- duplicated(data[ , "StumpNumber"])
        data[x, ]
    }

Эта функция будет отбирать и возвращать (неявно) все записи, прошедшие тест duplicated().

Используя ddply

Я сделал немного split-apply-Объединить здесь.Я приказываю ddply разбить набор данных на Stand и Plot (поскольку ваши данные вложены, и StumpNumber может быть уникальным только в пределах графика).Затем я применяю функцию, которую мы создали выше:

    sampleDuplicated <- ddply(sampleOrdered, .(Stand, Plot), findTreesAttachedToTheSameStump)

Распечатка проблемных пней

Теперь все, что нам нужно сделать, это вызвать sampleDuplicated, который содержит записи для каждого графика /Повторяющаяся комбинация «подставка / пень».

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