Come aggiungere righe a un frame di dati R


1 Answers

Analizziamo le tre soluzioni proposte:

# use rbind
f1 <- function(n){
  df <- data.frame(x = numeric(), y = character())
  for(i in 1:n){
    df <- rbind(df, data.frame(x = i, y = toString(i)))
  }
  df
}
# use list
f2 <- function(n){
  df <- data.frame(x = numeric(), y = character(), stringsAsFactors = FALSE)
  for(i in 1:n){
    df[i,] <- list(i, toString(i))
  }
  df
}
# pre-allocate space
f3 <- function(n){
  df <- data.frame(x = numeric(1000), y = character(1000), stringsAsFactors = FALSE)
  for(i in 1:n){
    df$x[i] <- i
    df$y[i] <- toString(i)
  }
  df
}
system.time(f1(1000))
#   user  system elapsed 
#   1.33    0.00    1.32 
system.time(f2(1000))
#   user  system elapsed 
#   0.19    0.00    0.19 
system.time(f3(1000))
#   user  system elapsed 
#   0.14    0.00    0.14

La soluzione migliore è pre-allocare lo spazio (come previsto in R). La soluzione migliore è quella di utilizzare la list e la soluzione peggiore (almeno basata su questi risultati di temporizzazione) sembra essere in fase di rbind .

Question

Ho guardato in giro , ma non riesco a trovare una soluzione specifica per il mio problema, che comporta l'accodamento di righe a un frame di dati R.

Sto inizializzando un frame dati a 2 colonne vuoto, come segue.

df = data.frame(x = numeric(), y = character())

Quindi, il mio obiettivo è quello di scorrere un elenco di valori e, in ogni iterazione, aggiungere un valore alla fine dell'elenco. Ho iniziato con il seguente codice.

for (i in 1:10) {
    df$x = rbind(df$x, i)
    df$y = rbind(df$y, toString(i))
}

Ho anche provato le funzioni c , append e merge senza successo. Per favore fatemi sapere se avete qualche suggerimento.




Prendiamo un 'punto' vettoriale che ha numeri da 1 a 5

point = c(1,2,3,4,5)

se vogliamo aggiungere un numero 6 ovunque all'interno del vettore, allora il comando sottostante può tornare utile

i) Vettori

new_var = append(point, 6 ,after = length(point))

ii) colonne di una tabella

new_var = append(point, 6 ,after = length(mtcars$mpg))

Il comando append accetta tre argomenti:

  1. il vettore / colonna da modificare.
  2. valore da includere nel vettore modificato.
  3. un indice, dopo il quale i valori devono essere aggiunti.

semplice...!! Ci scusiamo per qualsiasi ...!






Related