我开始使用大型数据框(828行×9列),这些数据框与土狼和随机位置使用的位置的植被测量有关。我使用ddply
按Coyote ID
,Random
(Y或N)和观察次数(nrow
)排列数据。
几行看起来像这样:
COYOTID Random nrow
1 Y 28
1 N 28
2 Y 16
2 N 12
3 Y 8
3 N 8
我希望R告诉我哪个ID在某个阈值之上有相同数量的观察值(比方说28:在这个例子中只有ID 1)。然后我想从原始数据框创建一个新的数据框,只保留包含这些ID的行。我怎样才能做到这一点?到目前为止我所看到的一切(我通常被引导到lapply
)处理将完整列操作为“子集”而不是子集的子集。
答案 0 :(得分:0)
我们可以尝试使用data.table
。我们将'data.frame'转换为'data.table'(setDT(df)
),按'COYOTID'分组,我们获得.I
length
的行索引(unique
) 'nrow'中的元素是1(uniqueN
是它的包装器),并且该值大于或等于28.使用此行索引列,我们对行进行子集化。
library(data.table)#v1.9.6+
setDT(df)[df[, .I[uniqueN(nrow)==1 & nrow>=28], by = COYOTID]$V1]
# COYOTID Random nrow
#1: 1 Y 28
#2: 1 N 28
或者我们可以使用dplyr
类似的方法。
library(dplyr)
df %>%
group_by(COYOTID) %>%
filter(n_distinct(nrow)==1 & nrow >=28)
# COYOTID Random nrow
# (int) (chr) (int)
#1 1 Y 28
#2 1 N 28