簡體   English   中英

如何使用R中較大的數據幀使用大於#的等長行創建新的數據幀?

[英]How Do I Create a New Data Frame Using Rows of Equal Length Above a Certain # From Larger Data Frame in R?

我從一個大數據框(828行x 9列)開始,該數據框與土狼和隨機位置所用位置的植被測量有關。 我使用ddplyCoyote IDRandom (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 )都是將整列作為“子集”而不是子集的子集來處理。

我們可以嘗試使用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    28

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM