我正在尝试隔离数据框中具有共同值的条目:请参阅下文以重建我的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
获取一个输出,告诉我哪些条目具有共同的值。换句话说,为了给定的Stand,Plot,StumpNumber组合快速隔离存在多个TreeNumber(或多于一行)的情况。在示例代码中,StumpNumber 3具有TreeNumber 3和TreeNumber 4.
我对duplicated()的理解是可以找到在一列中出现重复值的实例 - 我该怎么做才能找到常见的列组合出现的情况?
感谢。
答案 0 :(得分:5)
?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
答案 1 :(得分:0)
为方便起见,我假设您正在进行嵌套计划。因此,假设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()
测试的任何条目。
我在这里做了一点split-apply-combine。我指示ddply
按Stand
和Plot
拆分数据集(因为您的数据是嵌套的,而StumpNumber
可能只是在图中唯一)。然后,我应用上面创建的函数:
sampleDuplicated <- ddply(sampleOrdered, .(Stand, Plot), findTreesAttachedToTheSameStump)
现在我们需要做的就是调用sampleDuplicated
,其中包含重复的每个Plot / Stand / Stump组合的条目。