2015-09-14 15 views
5

Ho un Dataframe di più colonne dire colonna1, colonna2 ... colonna100. Come faccio a selezionare solo un sottoinsieme delle colonne es. (Non colonna1) dovrebbe restituire tutte le colonne column2 ... column100.Come selezionare solo un sottoinsieme di colonne dataframe in julia

data[[colnames(data) .!= "column1"]]) 

non sembra funzionare.

Non voglio modificare il dataframe. Voglio solo per selezionare tutte le colonne che non hanno un particolare nome di colonna come nel mio esempio

risposta

6

Come ha detto @Reza Afzalan, ciò che si sta tentando di fare restituisce una serie di stringhe, mentre i nomi di colonna in DataFrame sono simboli.

Dato che Julia non ha lista condizionale di comprensione, la cosa più bella che si possa fare Credo che sarebbe

data[:, filter(x -> x != :column1, names(df))] 

Questo vi darà il set di dati con la colonna 1 rimosso (senza mutare di esso). Si potrebbe estendere questo al controllo contro liste di nomi così:

data[:, filter(x -> !(x in [:column1,:column2]), names(df))] 
+0

Il [docs] (http://juliastats.github.io/DataFrames.jl/subsets/) Menzione utilizzando un set di nomi come selezione, anche se non approfondisci i modi in cui puoi definire un set del genere –

2

colnames(data) .!= "column1" # => restituisce un array di bool

Penso che il modo giusto è quello di usare una funzione di filtro che restituisce i nomi di colonna desiderati

filter(x->x != "column1", colnames(data)) # => restituisce un array di stringhe

nomi delle colonne dataframe sono di tipo di dati Simbolo

map(symbol ,str_array_of_filterd_column_names) # => restituisce una matrice di simboli identici

Problemi correlati