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), :]