簡體   English   中英

條件為“如果(特定變量)中的任何一個等於”,則刪除R中的行數據幀

[英]Deleting rows dataframe in R conditional to “if any of (a specific variable) is equal to”

我已經為此代碼苦苦掙扎了一段時間……我從一個數據幀(溜冰鞋)中提取了唯一ID為“ EID”的矢量,其長度為821。 看起來像這樣:

> head(skate$EID)
[1] "896-19" "895-8"  "899-1"  "899-5"  "899-8"  "895-7" 

如果任何t5 $ EID等於(重復)skate $ EID,我想刪除另一個數據幀(t5)中的完整行。

我能夠在t5的所有匹配EID中獲得“重復的”數據幀,如下所示:

> xx<-skate$EID
> t5[match(xx,t5[,26]), ]#gives me a dataframe of all matching EID in skate$EID
       record.t trip set month stratum NAFO unit.area time dur.set distance
8948          5  896  19    11     221   2J       N12  908      15        8
8849          5  895   8    10     766   3O       R36 1650      16        8
9289          5  899   1    12     743   3L       V26 2052      15        8
9299          5  899   5    12     746   3L       W27 1129      14        7

其中t5 [,26]對應於t5 $ EID列。 我敢肯定這很簡單,但是我不確定現在如何從t5數據框中刪除所有這些! 提示將不勝感激! 謝謝!

有很多方法可以做到這一點。 要測試矢量A中不在矢量B中的元素,可以使用!的組合! ,R的邏輯否定運算符(請參閱?"!" )和%in% (請參閱?%in% )。 然后,您可以使用該測試的結果來指示要保留的行。

# Create two example data.frames
skate <- data.frame(EID = c("896-19", "895-8", "899-1", "899-5"), 
                    score = 1:4)
t5 <- data.frame(EID = c("896-19", "camel", "899-1", "goat", "899-1"), 
                 score = 105:101)

# Method 1
t5[!t5$EID %in% skate$EID, ] 

# Method 2 (using the very handy subset() function)
subset(t5, !EID %in% skate$EID)

暫無
暫無

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

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