[英]how can I create a new data frame using exact rows from the old data frame in R Studio?
[英]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列)開始,該數據框與土狼和隨機位置所用位置的植被測量有關。 我使用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
)都是將整列作為“子集”而不是子集的子集來處理。
我們可以嘗試使用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.