2011-03-16 15 views
22

Eventuali duplicati:
how to apply a function to every row of a matrix (or a data frame) in RApplicare una funzione per ogni riga in un frame di dati in R

R - how to call apply-like function on each row of dataframe with multiple arguments from each row of the df

voglio applicare una funzione a ogni riga in un data frame, tuttavia, R lo applica a ogni colonna per impostazione predefinita. Come lo costringo diversamente?

> a = as.data.frame(list(c(1,2,3),c(10,0,6)),header=T) 
> a 
    c.1..2..3. c.10..0..6. 
1   1   10 
2   2   0 
3   3   6 
> sapply(a,min) 
c.1..2..3. c.10..0..6. 
      1   0 

volevo qualcosa di simile

1 2 
2 0 
3 3 
+2

Perché hai pensato di utilizzare 'sapply' per data.frames? –

+1

Ho visto che lapply doc ha detto che restituisce una lista, e doc sapientamente ha detto che è una versione user friendly che restituisce un oggetto del tipo appropriato. – highBandWidth

+3

'lapply()' e 'sapply()' funzionano su * componenti * di un vettore. Quel vettore può essere un vettore atomico (ad esempio '1: 10') o un elenco. Per un elenco, applica la funzione a ciascun componente dell'elenco. Un frame di dati è un caso speciale di un elenco, in cui le "colonne" sono i componenti, quindi 'lapply()' e 'sapply()' funzionano sulle "colonne" di un frame di dati. –

risposta

34

Volete apply (vedi la documentazione per esso). apply(var,1,fun) si applicherà alle righe, apply(var,2,fun) si applicherà alle colonne.

> apply(a,1,min) 
[1] 1 0 3 
+0

E se volessi il minimo da una data colonna? di esempio colonna 2. – Selvam

+1

@Selvam, 'min (a [, 2])' - ma probabilmente dovresti leggere alcuni dei materiali introduttivi di R (come http://cran.r-project.org/doc/manuals /R-intro.html#Array-indexing) - questa è una domanda piuttosto semplice. –

+17

Questo non risponde esattamente alle domande originali. 'apply()' proverà a convertire data.frame in una matrice (vedi i documenti di aiuto). Se non si converte con grazia a causa di tipi di dati misti, non sono abbastanza sicuro di cosa ne risulterebbe. –

Problemi correlati