gpt4 book ai didi

r - 使用具有多个语句的 data.table 进行条件过滤

转载 作者:行者123 更新时间:2023-12-02 18:25:50 26 4
gpt4 key购买 nike

我想知道是否有一种优雅简洁的方法可以使用 data.table 进行条件过滤。

我的目标是:如果满足条件 1,则根据条件 2 进行过滤。

例如,对于 iris 数据集,我怎样才能删除 Species=="setosa" 中的观察结果?其中 Sepal.Length<5.5 ,同时保留所有观察结果 Sepal.Length<5.5对于其他物种?

我知道如何一步步做到这一点,但我想知道是否有更好的方法在单个衬垫中做到这一点

# this is how I would do it in steps. 

data("iris")

# first only select observations in setosa I am interested in keeping
iris1<- setDT(iris)[Sepal.Length>=5.5&Species=="setosa"]

# second, drop all of setosa observations.
iris2<- setDT(iris)[Species!="setosa"]

# join data,
iris_final<-full_join(iris1,iris2)

head(iris_final)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1: 5.8 4.0 1.2 0.2 setosa
2: 5.7 4.4 1.5 0.4 setosa
3: 5.7 3.8 1.7 0.3 setosa
4: 5.5 4.2 1.4 0.2 setosa
5: 5.5 3.5 1.3 0.2 setosa # only keeping setosa with Sepal.Length>=5.5. Note that for other species, Sepal.Length can be <5.5
6: 7.0 3.2 4.7 1.4 versicolor

有没有更简洁优雅的方式来做到这一点?

最佳答案

您正在寻找类似以下内容的内容吗?不是很清楚你想要什么。

library(data.table)

dt <- data.table(iris)
dt[Sepal.Length >= 5.5 & Species == "setosa" | Species != "setosa"]

#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1: 5.8 4.0 1.2 0.2 setosa
#> 2: 5.7 4.4 1.5 0.4 setosa
#> 3: 5.7 3.8 1.7 0.3 setosa
#> 4: 5.5 4.2 1.4 0.2 setosa
#> 5: 5.5 3.5 1.3 0.2 setosa
#> ---
#> 101: 6.7 3.0 5.2 2.3 virginica
#> 102: 6.3 2.5 5.0 1.9 virginica
#> 103: 6.5 3.0 5.2 2.0 virginica
#> 104: 6.2 3.4 5.4 2.3 virginica
#> 105: 5.9 3.0 5.1 1.8 virginica

关于r - 使用具有多个语句的 data.table 进行条件过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70202814/

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