Matriz de índice sin elementos

Oct 10 2020

Tengo un vector

a = Vector(1:4)

[1, 2, 3, 4]

y quiero indexarlo a todos los elementos menos al tercero para obtener

[1, 2, 4]

en Rque podrías hacer a[-3]. ¿Qué se hace en Julia?

(Eventualmente quiero recorrer todos los elementos y comparar cada uno de ellos con el resto, tal vez esto sea relevante).

Respuestas

6 PrzemyslawSzufel Oct 10 2020 at 13:23

La sintaxis de Julia será, lamentablemente, más detallada que la de R:

julia> a[1:end .!== 3]
3-element Array{Int64,1}:
 1
 2
 4

Otra opción es mutar a:

julia> deleteat!(a,3)
3-element Array{Int64,1}:
 1
 2
 4

Si sus datos están dentro de un DataFrameque puede obtener una sintaxis mejor:

julia> df = DataFrame(a=1:4);

julia> df[Not(3),:]
3×1 DataFrame
│ Row │ a     │
│     │ Int64 │
├─────┼───────┤
│ 1   │ 1     │
│ 2   │ 2     │
│ 3   │ 4     │

y cuando DataFramesse importa Nottambién funcionará con Vector:

julia> a[Not(3)]
3-element Array{Int64,1}:
 1
 2
 4
7 BogumiłKamiński Oct 10 2020 at 13:26

Este caso de uso es común y está cubierto por el paquete InvertedIndices.jl . Si lo instala, puede ejecutar:

julia> using InvertedIndices

julia> a = 1:4
1:4

julia> a[Not(3)]
3-element Array{Int64,1}:
 1
 2
 4

Además, algunos paquetes (como DataFrames.jl) cargan automáticamente este paquete (por lo que si, por ejemplo, usa DataFrames.jl, no tiene que instalar y cargar InvertedIndices.jl por separado).

BenoitPasquier Oct 14 2020 at 04:40

no he visto

julia> a[1:end .≠ 3]
3-element Array{Int64,1}:
 1
 2
 4

o

julia> a[eachindex(a) .≠ 3]
3-element Array{Int64,1}:
 1
 2
 4

mencionado, pero tal vez haya una buena razón?


EDITAR : Estaba equivocado, la primera es en realidad la misma que la primera respuesta de Bogumil, excepto que !==ha sido reemplazada por≠