8
votes

Comment puis-je modifier une colonne dans un jeu de données inchange?

J'aimerais pouvoir transformer une colonne individuelle dans un ensemble de données d'inchange et enregistrer les données résultantes définies sur un nouveau fichier (CSV). Quel est le moyen le plus simple de faire ça?

essentiellement, j'aimerais pouvoir cartographier une fonction sur une colonne dans l'ensemble de données et remplacer la colonne d'origine par ce résultat.


0 commentaires

4 Réponses :


5
votes

Vous pouvez définir quelque chose comme: xxx

et utiliser comme xxx

Il n'y a qu'un seul problème avec le changement de noms de colonne - i J'essaierai de le réparer, quand j'aurai du temps libre ...


0 commentaires

2
votes

Encore une fois: Peut-être que vous pouvez utiliser la structure interne de l'ensemble de données.

user=> (defn update-column
         [dataset column f & args]
         (->> (map #(apply update-in % [column] f args) (:rows dataset))
           vec
           (assoc dataset :rows)))
#'user/update-column
user=> d
[:col-0 :col-1]
[1 2]
[3 4]
[5 6]

user=> (update-column d :col-1 str "d")
[:col-0 :col-1]
[1 "2d"]
[3 "4d"]
[5 "6d"]


2 commentaires

Oui, peut-être que ce sera plus optimal, même s'il est peut-être préférable d'ajouter des opérations correspondantes sur des jeux de données


Cette solution a la beauté qu'il peut être adaptée aux cas où chaque ligne est de structure de données associative, de carte ou de séquence.



5
votes

Voici deux fonctions similaires, nom de colonne et préservation de la commande.

(use '(incanter core io)))

(def data (col-names (read-dataset 'data.csv') [:a :b])

(save (transform-rows :a #(* % 2) data) 'transformed-data.csv')


0 commentaires

2
votes

Remarque: cette solution nécessite Inconvier 1.5.3 ou plus Strong> em>

pour ceux qui peuvent utiliser des versions récentes d'inchant ... p>

ADD-Colonne Strong> & Ajout- Colonne forte> a été ajoutée à Inconque dans 1.5.3 (Demande de traction) p>

de la DOCS: p>

tow-colonne h3>

" ajoute une colonne, avec des valeurs données, à un jeu de données. " P>

(use '(incanter core datasets))
  (def cars (get-dataset :cars))

(add-derived-column :dist-over-speed [:dist :speed] (fn [d s] (/ d s)) cars)

(with-data (get-dataset :cars)
  (view (add-derived-column :speed**-1 [:speed] #(/ 1.0 %))))


0 commentaires