gpt4 book ai didi

r - 通过 setdiff/intersect 删除/子集 R 中的行

转载 作者:行者123 更新时间:2023-11-30 08:54:51 25 4
gpt4 key购买 nike

我正在尝试从数据集中删除包含某些植被类型的行。我想从未调查的数据中删除那些在调查数据中未找到植被类型的行。我找到了一种方法来做到这一点,但正在寻找一种单行方法。我目前正在这样做:

> setdiff(unsurveyed_1$VEGETATION, surveyed_1$VEGETATION)

它返回七种植被类型,然后我将其删除:

> unsurveyed_1 <- unsurveyed_1[!unsurveyed_1$VEGETATION == "Acer rubrum- Nyssa sylvatica saturated forest alliance",]
> unsurveyed_1 <- unsurveyed_1[!unsurveyed_1$VEGETATION == "Acer rubrum/Quercus coccinea-Acer rubrum-Vaccinium corybosum-Vaccinium palladium",]
> unsurveyed_1 <- unsurveyed_1[!unsurveyed_1$VEGETATION == "Building",]
> unsurveyed_1 <- unsurveyed_1[!unsurveyed_1$VEGETATION == "Parking Lot",]
> unsurveyed_1 <- unsurveyed_1[!unsurveyed_1$VEGETATION == "Prunus serotina",]
> unsurveyed_1 <- unsurveyed_1[!unsurveyed_1$VEGETATION == "Typha (angustifolia, latifolia) - (Schoenoplectus spp.) Eastern Herbaceous Vegetation",]
> unsurveyed_1 <- unsurveyed_1[!unsurveyed_1$VEGETATION == "Water",]

我尝试了一些不同的选项,包括子集化,但迄今为止收效甚微,认为这将是我最好的选择。我也在寻找与 intersect 类似的东西,但我假设它会有类似的答案。

编辑:除了使用 @Cath 提供的代码之外,我还对其进行了编辑以获得相反的结果。

> unsurveyed_2 <- unsurveyed_2[unsurveyed_2$VEGETATION %in% setdiff(unsurveyed_2$VEGETATION, surveyed_1$VEGETATION), ]

最佳答案

显而易见的是:

ID <- unsurveyed_1$VEGETATION %in% unique(surveyed_1$VEGETATION)
unsurveyed1 <- unsurveyed1[ID,]

您使用逻辑向量ID作为行索引来选择要保留的行。 ID 对于每行都有一个值 TRUE,其中 unsurveyed1$VEGETATION 可以在 surveyed1$VEGETATION 中找到,并且 FALSE 否则。如果您拥有大量数据并且没有太多不同的植被类型,则使用 surveyed1$VEGETATION 中的唯一值只会提高性能。

因此,根本不需要使用 setdiff(),更不需要将每个结果复制到新行中。在使用 R 时,请开始考虑临时对象。这将使您的编程生活变得更加轻松。

编辑:这正是 @Cath 在他/她的一行评论中所做的。

<小时/>

如果您坚持使用setdiff(),那么这将大大减少打字工作:

thediff <- setdiff(unsurveyed_1$VEGETATION, surveyed_1$VEGETATION)
ID <- unsurveyed_1$VEGETATION %in% thediff
unsurveyed1 <- unsurveyed1[!ID,]

请注意,您必须使用 NOT (!) 运算符反转 ID 向量,以删除未调查植被与 thediff 中的值匹配的所有线条.

旁注:setdiff()%in% 的内部代码几乎完全相同。不同之处在于,setdiff() 返回在第二个向量中找不到的实际值,而 %in% 返回一个逻辑向量,表示 FALSE 如果在第二个向量中找不到该值。

关于r - 通过 setdiff/intersect 删除/子集 R 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35433901/

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