Ho un dataframe di 58 colonne, ho bisogno di applicare la trasformazione $ log (x_ {i, j} +1) $ a tutti i valori nelle prime 56 colonne. Quale metodo potrei usare per andare su questo in modo più efficiente? Presumo che ci sia qualcosa che mi permetterebbe di fare questo piuttosto che usare solo alcuni loop per scorrere l'intero dataframe.Applicare la funzione a ogni valore in un dataframe R
risposta
Si dovrebbe essere in grado di fare riferimento solo alle colonne che si desidera, e fare l'operazione, vale a dire: la risposta
df.log[,1:56] <- log(df[,1:56]+1)
di alexwhan è giusto per log (e dovrebbe probabilmente essere selezionata come la risposta corretta). Tuttavia, funziona in modo così pulito perché il log è vettorializzato. Ho sperimentato il dolore speciale delle funzioni non vettorializzate troppo spesso. Quando ho iniziato con R, e non ho capito bene la famiglia applicata, ho fatto ricorso a brutti loop molto spesso. Quindi, per gli scopi di coloro che potrebbero imbattersi in questa domanda che non ha funzioni vettorializzate, fornisco la seguente dimostrazione di concetto.
#Creating sample data
df <- as.data.frame(matrix(runif(56 * 56), 56, 56))
#Writing an ugly non-vectorized function
logplusone <- function(x) {log(x[1] + 1)}
#example code that achieves the desired result, despite the lack of a vectorized function
df[, 1:56] <- as.data.frame(lapply(df[, 1:56], FUN = function(x) {sapply(x, FUN = logplusone)}))
#Proof that the results are the same using both methods...
#Note: I used all.equal rather than all so that the values are tested using machine tolerance for mathematical equivalence. This is probably a non-issue for the current example, but might be relevant with some other testing functions.
#should evaluate to true
all.equal(log(df[, 1:56] + 1),as.data.frame(lapply(df[, 1:56], FUN = function(x) {sapply(x, FUN = logplusone)})))
Nota che, anche se non avrebbe funzionato per il vostro esempio particolare - si può andare in giro una funzione non essendo vettorizzati a volte eseguendolo attraverso la funzione 'Vectorize'. – Dason
Anche se funzionerebbe se si raddoppiano Vectorized, ad es. Vectorize (Vectorize (logplusone, "x"), "x") – russellpierce
... tuttavia, trovo le funzioni Vectorized un po 'difficili da leggere, quindi preferisco la soluzione presentata nella mia risposta semplicemente perché è più facile per io (quando torno al codice) per capire come funziona. – russellpierce
- 1. Applicare la funzione a un dataframe MultiIndex con panda/python
- 2. Come applicare una funzione su ogni riga di un dataframe?
- 3. Applicare la funzione su Pandora dataframe
- 4. Applicare la funzione a ciascuna riga di Spark DataFrame
- 5. Applicare la funzione strptime a ogni membro di un data.table
- 6. Pandas dataframe: applicare la funzione a tutte le colonne
- 7. Applicare una funzione per ogni riga in un frame di dati in R
- 8. Applicare la funzione di dataframe con Cambiando l'argomento
- 9. Applicare la funzione condizionale
- 10. Come applicare la funzione max per ogni riga in KDB?
- 11. Come applicare Cython a Pandas DataFrame
- 12. R: Applicare la funzione su colonne specifiche preservando il resto del dataframe
- 13. Come applicare una funzione polimorfica a un valore dinamico
- 14. dove è fmap (o come applicare un valore fn a ogni valore di una mappa)
- 15. Come applicare Quantile su un dataframe
- 16. Applicare la funzione al gruppo panda da
- 17. applicare la funzione in JavaScript
- 18. Pandas: Come usare applicare la funzione a più colonne
- 19. Aggiunta di una colonna a un dataframe in R
- 20. Python: applicare la funzione a valori in dizionario nidificato
- 21. Applicare una partita e funzione in serie di righe in un dataframe sostituire al fine
- 22. Hanno un valore di ritorno nomatch poiché utilizza la funzione di corrispondenza in R
- 23. dataframe iterativamente costruito in R
- 24. Applicare una funzione a ogni riga di una matrice o di un frame di dati
- 25. Come applicare parzialmente una funzione in modo efficiente in R?
- 26. Come cancellare la prima riga di un dataframe in R?
- 27. R Funzione Apply() su colonne specifiche del dataframe
- 28. Applicare una funzione a tutte le combinazioni a coppie degli elementi di elenco in R
- 29. Applicare una funzione ai gruppi all'interno di un data.frame in R
- 30. restituisce Valori multipli panda applicare su un dataframe
o 'df [, 1: 56] <- log (df [, 1: 56] +1)' –