[英]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.