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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top