Προσπαθώ να αρχικοποιήσω ένα data.frame χωρίς γραμμές. Βασικά, θέλω να καθορίσω τους τύπους δεδομένων για κάθε στήλη και να τους ονομάσω, αλλά να μην δημιουργηθούν γραμμές ως αποτέλεσμα.
Το καλύτερο που μπόρεσα να κάνω μέχρι στιγμής είναι κάτι σαν:
df <- data.frame(Date=as.Date("01/01/2000", format="%m/%d/%Y"),
File="", User="", stringsAsFactors=FALSE)
df <- df[-1,]
Το οποίο δημιουργεί ένα data.frame με μια μόνο γραμμή που περιέχει όλους τους τύπους δεδομένων και τα ονόματα των στηλών που ήθελα, αλλά δημιουργεί επίσης μια άχρηστη γραμμή η οποία στη συνέχεια πρέπει να αφαιρεθεί.
Υπάρχει καλύτερος τρόπος για να γίνει αυτό;
Απλά αρχικοποιήστε το με κενά διανύσματα:
df <- data.frame(Date=as.Date(character()),
File=character(),
User=character(),
stringsAsFactors=FALSE)
Εδώ'είναι ένα άλλο παράδειγμα με διαφορετικούς τύπους στηλών :
df <- data.frame(Doubles=double(),
Ints=integer(),
Factors=factor(),
Logicals=logical(),
Characters=character(),
stringsAsFactors=FALSE)
str(df)
> str(df)
'data.frame': 0 obs. of 5 variables:
$ Doubles : num
$ Ints : int
$ Factors : Factor w/ 0 levels:
$ Logicals : logi
$ Characters: chr
ΠΑΡΑΤΉΡΗΣΗ :
Η αρχικοποίηση ενός data.frame
με μια κενή στήλη λανθασμένου τύπου δεν εμποδίζει περαιτέρω προσθήκες γραμμών που έχουν στήλες διαφορετικού τύπου.
Αυτή η μέθοδος είναι απλά λίγο ασφαλέστερη με την έννοια ότι θα έχετε τους σωστούς τύπους στηλών από την αρχή, επομένως αν ο κώδικάς σας βασίζεται σε κάποιο έλεγχο τύπου στήλης, θα λειτουργήσει ακόμα και με ένα data.frame
με μηδέν γραμμές.
Μπορείτε να το κάνετε χωρίς να καθορίσετε τύπους στηλών
df = data.frame(matrix(vector(), 0, 3,
dimnames=list(c(), c("Date", "File", "User"))),
stringsAsFactors=F)
Θα μπορούσατε να χρησιμοποιήσετε το read.table
με ένα κενό αλφαριθμητικό για την είσοδο text
ως εξής:
colClasses = c("Date", "character", "character")
col.names = c("Date", "File", "User")
df <- read.table(text = "",
colClasses = colClasses,
col.names = col.names)
Εναλλακτικά, προσδιορίζοντας το col.names
ως συμβολοσειρά:
df <- read.csv(text="Date,File,User", colClasses = colClasses)
Ευχαριστούμε τον Richard Scriven για τη βελτίωση