簡體   English   中英

從 r 中的數據框中刪除選定的觀察值

[英]Removing selected observations from a dataframe in r

我希望根據特定列中的值從大型數據集(> 400 行)中刪除 7 行。 我在這個簡單的努力中遇到了問題。

 ##Generate sample dataset
    Site.Num=c(1:20)
    Year=c(1990:2009)
    Day=c(10:29)
    Final<-data.frame(Site.Num,Year,Day)


 ##I would like to remove 5 rows, based on 5 sites from the Site.Num column
     Final <- Final[which(Final$Site.Num!=c(1,4,10,11,14)), ]


##I receive this error message
    Warning message:
        In Final$Site.Num != c(1, 4, 10, 11, 14) :
        longer object length is not a multiple of shorter object length

警告是因為您正在使用!=來比較不同的向量,並且會發生回收。 但是,此警告很重要,因為在這種情況下,您要求的值與預期不同。

例如(使用==為清晰起見)如果您想查看c(1,2)中包含c(1,2,2)哪些值,請考慮以下表達式:

> c(1,2,2) == c(1,2)
[1]  TRUE  TRUE FALSE
Warning message:
In c(1, 2, 2) == c(1, 2) :
  longer object length is not a multiple of shorter object length

2顯然在兩個向量中。 FALSE值是因為右邊的向量正在被回收,所以這些是比較的實際值:

> c(1,2,2) == c(1,2,1)
[1]  TRUE  TRUE FALSE

然而,在前一種情況下,右邊的向量沒有被循環整數次。 這通常意味着你做了一些你沒有預料到的事情。 您需要運算符%in%來提供集合包含:

> c(1,2,2) %in% c(1,2)
[1] TRUE TRUE TRUE

沒有警告,和預期的答案。

對於您的問題,這是獲取所需行的命令:

Final <- Final[!(Final$Site.Num %in% c(1,4,10,11,14)), ]

請注意, which在此語句中無濟於事,除非返回的行集為空。

使用 dplyr 包,你可以做這樣的事情。

filter(Final, !Site.Num %in% c(1,4,10,11,14))

暫無
暫無

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

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