Creați un gol de date.cadru

Am'm încercarea de a inițializa o data.cadru fără rânduri. Practic, vreau să specificați tipurile de date pentru fiecare coloană și numele ei, dar nu au nici rânduri creat ca un rezultat.

Cel mai bun mi'am fost în stare să facă până acum este ceva de genul:

df <- data.frame(Date=as.Date("01/01/2000", format="%m/%d/%Y"), 
                 File="", User="", stringsAsFactors=FALSE)
df <- df[-1,]

Care creează o data.cadru cu un singur rând care conține toate tipurile de date și nume de coloană am vrut, dar creează, de asemenea, inutil rând, care apoi trebuie să fie eliminate.

Există o modalitate mai bună de a face acest lucru?

Soluția

Doar inițializa cu gol vectori:


df 
Comentarii (16)

Dacă tu deja existente cadru de date, las's spun " df " care are coloane pe care doriți, atunci puteți crea doar un gol cadru de date prin eliminarea tuturor rânduri:

empty_df = df[FALSE,]

Observați că " df " conține încă datele, dar empty_df nu't.

Am găsit această întrebare în căutarea pentru modul de a crea o nouă instanță cu rânduri goale, astfel încât cred că ar putea fi utile pentru unii oameni.

Comentarii (6)

Poți să o faci fără a preciza tipuri de coloane

df = data.frame(matrix(vector(), 0, 3,
                dimnames=list(c(), c("Date", "File", "User"))),
                stringsAsFactors=F)
Comentarii (1)

Ai putea folosi citit.masa cu un șir gol pentru intrare "text", după cum urmează:


colClasses = c("Date", "character", "character")
col.names = c("Date", "File", "User")

df 
Comentarii (3)

Cel mai eficient mod de a face acest lucru este de a utiliza "structura" pentru a crea o listă care are clasa "de date.cadru":

structure(list(Date = as.Date(character()), File = character(), User = character()), 
          class = "data.frame")
# [1] Date File User
#  (or 0-length row.names)

Pentru a pune acest lucru în perspectivă, comparativ cu în prezent răspunsul acceptat, aici's-o simplă referință:


s 
Comentarii (5)

Doar declare

table = data.frame()

atunci când încercați să rbind prima linie se va crea coloane

Comentarii (3)

Dacă sunteți în căutarea pentru dificultati :

read.csv(text="col1,col2")

așa că don't nevoie pentru a specifica numele coloanelor separat. Veți obține coloana implicit de tip logic până când umple cadru de date.

Comentarii (3)

Am creat gol cadru de date folosind următorul cod

df = data.frame(id = numeric(0), jobs = numeric(0));

și a încercat să lege câteva rânduri pentru a popula la fel după cum urmează.


newrow = c(3, 4)
df 
Comentarii (0)

Dacă doriți să creați un gol de date.cadru dinamic cu nume (colnames într-o variabilă), acest lucru poate ajuta:


names 
Comentarii (0)

A creați un gol cadru de date, trece în numărul de rânduri și coloane necesare în următoarea funcție:


create_empty_table 
Comentarii (1)

Dacă tu nu't mintea nu-specificarea tipurilor de date în mod explicit, puteți face în acest fel:


headers
Comentarii (0)

Dacă doriți să declare astfel de date.cadru cu mai multe coloane, se'll fi, probabil, o durere de tip coloana clase de mână. Mai ales dacă puteți face uz de rep, această abordare este ușor și rapid (aproximativ 15% mai rapid decât alte soluții care pot fi generalizate de genul asta):

Dacă se dorește coloana clase sunt într-un vector colClasses, puteți face următoarele:

library(data.table)
setnames(setDF(lapply(colClasses, function(x) eval(call(x)))), col.names)

lapply va avea ca rezultat într-o listă de lungime dorită, fiecare element din care este pur și simplu un gol tastat vector ca numeric () " sau " număr întreg().

setDF convertește această "listă", prin referire la un date.cadru`.

setnames adaugă numele dorite de referință.

Viteza de comparație:


classes 
Comentarii (0)

Prin Utilizarea de date.tabel putem specifica tipurile de date pentru fiecare coloana.

library(data.table)    
data=data.table(a=numeric(), b=numeric(), c=numeric())
Comentarii (0)

Dacă aveți deja un dataframe, puteți extrage metadatele (numele coloanelor și tipuri) de la un dataframe (de exemplu, dacă se controlează un BUG care este numai a declanșat cu anumite intrări și nevoie de un gol dummy Dataframe):

`` colums_and_types <- sapply(df, clasa)

imprimeuri: "c('col1', 'col2')"

print(dput(ca.personajul(nume(colums_and_types))))

imprimeuri: "c('integer', 'factor')"

dput(ca.caracter(ca.vector(colums_and_types))) ``

Și de a folosi apoi citesti.masa` pentru a crea gol dataframe

citit.masa(text = "", colClasses = c(&#39;integer&#39;, &#39;factor&#39;), col.nume = c(&#39;col1&#39;, &#39;col2&#39;))

Comentarii (0)

Spune-ți coloana nume sunt dinamice, puteți crea un rând liber-numit matrice și transformarea acesteia într-un cadru de date.


nms 
Comentarii (1)

Această întrebare nu't a aborda în mod special preocupările mele (prezentate aici), dar în cazul în care cineva vrea să facă acest lucru cu un parametrizate numărul de coloane și fără constrângere:

> require(dplyr)
> dbNames  emptyTableOut % 
    setNames(nm = c(dbNames))
> glimpse(emptyTableOut)
Observations: 0
Variables: 4
$ a  
$ b  
$ c  
$ d 

Ca divibisan membre în legătură întrebare,

...motivul [constrângere] apare [când cbinding matrici și lor constitutive tipuri] este o matrice poate avea doar un un singur tip de date. Atunci când cbind 2 matrici, rezultatul este încă o matrice și deci variabilele sunt constrâns într-un singur tip înainte conversia de date.cadru

Comentarii (0)