trasformare i nomi delle variabili della stringa del frame di dati
Domanda
Ho un data frame che contiene date e ID.Devo aggiungere più colonne a questo data frame in base a ciascuna data.Uso ddply
per farlo come segue:
ddply(df, "dt", transform, new_column1 = myfun(column_name_1))
Tuttavia, ho un sacco di nomi di colonne e vorrei aggiungere più nuove colonne.C'è un modo per passare una stringa da trasformare invece di new_column1?Ad esempio ho provato:
ddply(df, "dt", transform, get("some_column_name")=myfun(column_name_1))
ma questo non funziona.Inoltre, se passo il column_name_1
a myfun come stringa, posso semplicemente utilizzare get("column_name_1")
all'interno di myfun
per fare riferimento alla colonna?
AGGIORNAMENTO: NON SONO SICURO COME FORMATTARLO MEGLIO
input:
id date val
id1 d1 1
id2 d1 2
id3 d1 3
id4 d1 4
id1 d2 10
id2 d2 20
id3 d2 30
id4 d2 40
out (per 2 bucket ad esempio)
id date val bucket
id1 d1 1 1
id2 d1 2 1
id3 d1 3 2
id4 d1 4 2
id1 d2 10 1
id2 d2 20 1
id3 d2 30 2
id4 d2 40 2
Soluzione
Farlo con transform
è semplice, ma perché non qualcosa di più semplice come
tmpf <- function(x) {
x[[new_column_name_1]] <- myfun(x[[column_name_1]])
x[[new_column_name_2]] <- myfun(x[[column_name_2]])
...
x
}
ddply(df,"dt",tmpf)
Oppure puoi avere un vettore di nomi di colonna da modificare, o farlo al volo:
tmpf <- function(x,cols=c("column_name_1","column_name_2")) {
newcols <- paste("new",cols,sep="_")
for (i in seq_along(cols)) {
x[[newcols[i]]] <- myfun(x[[cols[i]]])
}
}
Probabilmente c'è qualcosa di ancora più intelligente con assign
nell'ambiente appropriato.
Se avessi un esempio riproducibile, potrei testarlo.