首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用R中较大数据帧中某个#以上的等长行创建新数据帧?

如何使用R中较大数据帧中某个#以上的等长行创建新数据帧?
EN

Stack Overflow用户
提问于 2015-11-27 00:56:50
回答 1查看 39关注 0票数 1

我从一个大的数据帧(828行x 9列)开始,它与郊狼使用的位置和随机位置的植被测量有关。我使用ddply按照Coyote IDRandom (Y或N)和观察次数(nrow)来排列数据。

有几行如下所示:

代码语言:javascript
复制
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)都将整个列作为“子集”来处理,而不是子集的子集。

EN

回答 1

Stack Overflow用户

发布于 2015-11-27 01:04:15

我们可以尝试使用data.table。我们将'data.frame‘转换为'data.table’(setDT(df)),按'COYOTID‘分组,我们得到行索引(.I),其中'nrow’中的unique元素的length是1 (uniqueN是它的包装器),并且值大于或等于28。使用此行索引列,我们将行设置为子集。

代码语言:javascript
复制
 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

代码语言:javascript
复制
 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33943773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档