2016-08-02 8 views
2

Ich versuche, ein Netzwerkdaten (Graph von ids) in R. Die Datei zu lesen ist ‚Network.txt‘ bezeichnet und Daten ist wie folgt:zuweisen Spaltennamen in einer Datendatei von R lesen

4 0 
5 0 
6 0 
7 0 
8 0 
9 0 
4029 1 
4030 1 
4031 1 
4032 1 
4033 1 
19088 9040 
19089 9040 
19090 9040 
19091 9040 
19092 9040 
19093 9040 
19094 9040 
19095 9040 
19096 9040 
19097 9040 

Und ich lese es mit read.table() -Modul.

data = read.table("network.txt",sep="\t",header=FALSE) 
colnames(data) <- unlist(c('to', 'from')) 

Error in `colnames<-`(`*tmp*`, value = c("to", "from")) : 
    'names' attribute [2] must be the same length as the vector [1] 

Also, wie Spaltennamen zuweisen? Gibt es einen Fehler beim Lesen der Originaldatei?

+1

der Fehler gegeben, vermute ich, ist Ihre Daten nicht richtig eingelesen. Überprüfen Sie 'str (Daten)'. Höchstwahrscheinlich müssen Sie nur den 'sep' Parameter herausnehmen, und es wird funktionieren. – alistaire

+0

@ProcrastinatusMaximus Ich würde die Frage lesen und vor dem Dupe Tagging beantworten. Ich denke, dass der verlinkte Beitrag das Problem in der Frage nirgends anspricht, es sei denn, Sie haben es irgendwo versteckt in dem Link gefunden. – akrun

Antwort

2

Wir brauchen nur

colnames(data) <- c('to', 'from') 

als c('to', 'from') kehrt ein vector und unlist hier nichts tut. Die unlist in Fällen verwendet wird, wo der Ausgang list oder (data.frame die auch aka columns a list mit Elementen gleichen length ist) ist


Hinsichtlich des Fehlers ist es möglich, dass wir die falschen sep in einem resultierenden verwendet einzelne Spalte, die durch Überprüfung der str(data) identifiziert werden kann. Ich würde sep=""


Neben der oben Empfehlung verwenden, können wir die col.names in read.table

data <- read.table("network.txt",sep="",header=FALSE, col.names = c("to", "from")) 

Oder fread von data.table verwenden angeben (die das Trennzeichen nimmt automatisch)

library(data.table) 
data <- fread("network.txt", header=FALSE, col.names = c("to", "from")) 
+1

Danke @akrun, ich bin ein Anfänger in R. Und, ich dachte, mit echten Daten zu spielen ist eine gute Idee, damit zu beginnen. Es funktioniert jetzt sehr gut. –

4

Sie können entweder die Spaltennamen innerhalb der read.table fu angeben nction Anruf, als solche:

read.table("network.txt", col.names = c("Col1", "Col2"))

Oder Sie es auch mit der names Funktion in ähnlicher Weise zu Ihrem Versuch tun können:

test1 <- read.table("Question1.txt") 
names(test1) <- c("col1", "col2") 
Verwandte Themen