gpt4 book ai didi

从 r 中的数据框中删除选定的观察结果

转载 作者:行者123 更新时间:2023-12-02 21:24:33 25 4
gpt4 key购买 nike

我希望根据特定列中的值从大型数据集中(>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,2) 的哪些值包含在 c( 1,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 在此语句中没有帮助或有害,除非返回的行集为空。

关于从 r 中的数据框中删除选定的观察结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25457843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com