Dataframe 查找列值位于集合中的行(类似于isin或R%in%)

Dataframe 查找列值位于集合中的行(类似于isin或R%in%),dataframe,julia,Dataframe,Julia,我想找到物种位于setosa或virginica的所有行。请注意,答案必须使用对要查找的值数组的查找,因为我希望在查找任意多个值时结果有效 有一个函数叫做indexin。这让我走了一半: using CSV, DataFrames iris = CSV.read(joinpath(dirname(pathof(DataFrames)),"..","test/data/iris.csv")) head(iris) 6×5 DataFrame │ Row │ SepalLength │ Sepa

我想找到物种位于
setosa
virginica
的所有行。请注意,答案必须使用对要查找的值数组的查找,因为我希望在查找任意多个值时结果有效


有一个函数叫做indexin。这让我走了一半:

using CSV, DataFrames
iris = CSV.read(joinpath(dirname(pathof(DataFrames)),"..","test/data/iris.csv"))

head(iris)
6×5 DataFrame
│ Row │ SepalLength │ SepalWidth │ PetalLength │ PetalWidth │ Species │
│     │ Float64⍰    │ Float64⍰   │ Float64⍰    │ Float64⍰   │ String⍰ │
├─────┼─────────────┼────────────┼─────────────┼────────────┼─────────┤
│ 1   │ 5.1         │ 3.5        │ 1.4         │ 0.2        │ setosa  │
│ 2   │ 4.9         │ 3.0        │ 1.4         │ 0.2        │ setosa  │
│ 3   │ 4.7         │ 3.2        │ 1.3         │ 0.2        │ setosa  │
│ 4   │ 4.6         │ 3.1        │ 1.5         │ 0.2        │ setosa  │
│ 5   │ 5.0         │ 3.6        │ 1.4         │ 0.2        │ setosa  │
│ 6   │ 5.4         │ 3.9        │ 1.7         │ 0.4        │ setosa  │
但当我尝试使用它编制索引时,结果是:

iris[indexin(iris.Species ,["setosa", "virginica"])]

[“virginica”,“setosa”]
周围附加的
元组可以避免在搜索列表上广播。

您可以使用
findin
功能

iris[ in.(iris[:Species],(["virginica","setosa"],)),: ]
请注意,如果要使用
findin
只搜索一个值,它必须始终是一个数组,如

iris[findin(iris[:Species],["setosa","virginica"]),:]

实现这一点的一种方法是使用
findall

iris[findin(iris[:Species],["setosa"]),:]

啊,这有点难看,但我想这些纠结最终会被解决:)多谢朱利安的方法是在[“维吉尼亚”、“塞托萨”和虹膜]中编写
过滤器(x->x[:物种]
。如果您使用DataFramesMeta,您也可以使用
@where(iris,in.(:Species,[[“virginica”,“setosa”]])
findin
在0.7中被弃用,并从1.0中删除
findall(在(…),…)
取代了它。是的,我意识到在发布了这个答案之后。。。无论如何,谢谢你的提醒:)
iris[findin(iris[:Species],["setosa"]),:]
iris[findall(in(["setosa", "virginica"]), iris.Species), :]