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 │
我想找到“ setosa
”或“ virginica
”中“种类”的所有行。请注意,答案必须使用对值数组的查找来查找,因为我希望结果在查找任意多个值时都有效。
有一个名为indexin的函数。它使我半途而废:
iris[indexin(iris.Species ,["setosa", "virginica"])]
但是当我尝试将其用于索引时,结果是:
ERROR: ArgumentError: Only Integer values allowed when indexing by vector of numbers
答案 0 :(得分:2)
iris[ in.(iris[:Species],(["virginica","setosa"],)),: ]
在tuple
周围附加了["virginica","setosa"]
,可以避免在搜索列表中进行广播。
答案 1 :(得分:1)
一种实现方法是使用findall
:
iris[findall(in(["setosa", "virginica"]), iris.Species), :]
答案 2 :(得分:0)
您可以使用{'foo': 'bar', 'baz': 'buff', '+<': 'other/file.yaml', 'special': 'value'}
函数。
findin
请注意,如果要使用iris[findin(iris[:Species],["setosa","virginica"]),:]
仅搜索一个值,则该值必须始终是一个数组,例如
findin