我从一个大的数据帧(828行x 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:在本例中只有ID1)。然后我想从原始数据框中创建一个新的数据框,只保留包含这些ID的行。我该怎么做呢?到目前为止,我看到的所有内容(通常是lapply)都将整个列作为“子集”来处理,而不是子集的子集。
发布于 2015-11-27 01:04:15
我们可以尝试使用data.table。我们将'data.frame‘转换为'data.table’(setDT(df)),按'COYOTID‘分组,我们得到行索引(.I),其中'nrow’中的unique元素的length是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 28https://stackoverflow.com/questions/33943773
复制相似问题