Il pacchetto data.table
ha aggiunto una nuova funzione ai dati melt
in più colonne contemporaneamente. Questo è molto utile, ma non riesco a capire come preservare il "suffisso" dei nomi delle variabili pre-fuso. Per esempio:Tabella dati fusione e colata utilizzando il modello
library(data.table)
# create data table
dt <- data.table(id = seq(3), a_3 = seq(3), a_4 = seq(4, 6), b_3 = seq(7, 9), b_4 = seq(10, 12))
# melt and cast in one step using new feature
m1 <- melt(dt, id.vars='id', measure=patterns("a_", "b_"), value.name=c("a_", "b_"))
risultati nella tabella dei dati:
id variable a_ b_
1: 1 1 1 7
2: 2 1 2 8
3: 3 1 3 9
4: 1 2 4 10
5: 2 2 5 11
6: 3 2 6 12
Questa è la "forma" che voglio, ma le variabili a_3
, a_4
, b_3
e b_4
sono stati indicizzati 1
e 2
. Quello che voglio è la colonna variable
per contenere 3,3,3,4,4,4
, in base ai suffissi dei nomi delle variabili.
Potrei ovviamente fare questo modo "vecchio stile" con melt
, strsplit
, dcast
, ma è un po 'ingombrante. Spero che una soluzione a una linea sia ancora molto veloce.
Che funziona. Stavo evitando qualcosa del genere perché nella mia situazione reale ho migliaia di variabili e non voglio elencare quali sono tutti i loro suffissi. Suppongo che potrei usare 'gsub' nella lista dei nomi delle variabili per isolare tutti i suffissi, ma poi sta diventando abbastanza vicino alla quantità di sforzo nell'approccio' melt', 'strsplit',' dcast' ... – dmp
Il 'c (3,4)' potrebbe essere sostituito con 'sub ("^a_ "," ", names (dt) [grepl ("^a_ ", names (dt))])', eventualmente da ordinare se non sono naturalmente così. –
Grazie. Questo è un po 'la cosa contorta che stavo cercando di evitare. I miei suffissi variabili sono stringhe di caratteri che non sono necessariamente ordinate, e ce ne sono molte. Speravo che ci sarebbe stato un modo "naturale" per usare questa funzionalità di 'melt.data.table', ma posso dare un suggerimento che non c'è. Grazie comunque per il tuo aiuto! – dmp