Dataframe 使用findall()函数在具有多个条件的数据帧中搜索索引

Dataframe 使用findall()函数在具有多个条件的数据帧中搜索索引,dataframe,select,conditional-statements,julia,Dataframe,Select,Conditional Statements,Julia,茱莉亚1.3 如何在具有多种条件的数据框中搜索项目。下面是一个iris.csv数据集可下载的示例 假设我想选择萼片长度等于5.1的行的索引: findall(df[:,1] .== 5.1) 9-element Array{Int64,1}: 1 18 20 22 24 40 45 47 99 与选择具有刚毛的物种指数相同: findall(df[:,5] .== "setosa")[1:10] 10-element Array{Int64,1}:

茱莉亚1.3

如何在具有多种条件的数据框中搜索项目。下面是一个iris.csv数据集可下载的示例

假设我想选择萼片长度等于5.1的行的索引:

findall(df[:,1] .== 5.1)

9-element Array{Int64,1}:
  1
 18
 20
 22
 24
 40
 45
 47
 99
与选择具有刚毛的物种指数相同:

findall(df[:,5] .== "setosa")[1:10]
10-element Array{Int64,1}:
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
假设现在我想选择萼片长度等于5.1的行的索引,我尝试了与R中的函数类似的语法:

我应该使用哪一个命令?

您需要广播&运算符,注意&,前面的括号和点

但是,请注意,df[:,1]。==5.1和df[:,5]。==setosa都分配临时数组。考虑使用FUNDALL的版本,它将函数作为第一个参数,如::

findall(x -> x.sepal.length == 5.1 && x.species == "setosa", eachrow(df))
findall(df[:,1] .== 5.1 & df[:,5] .== "setosa")

MethodError: no method matching &(::Float64, ::PooledArrays.PooledArray{String,UInt32,1,Array{UInt32,1}})
Closest candidates are:
  &(::Any, ::Any, !Matched::Any, !Matched::Any...) at operators.jl:529

Stacktrace:
 [1] top-level scope at In[149]:1
findall((df[:,1] .== 5.1) .& (df[:,5] .== "setosa"))
findall(x -> x.sepal.length == 5.1 && x.species == "setosa", eachrow(df))