2013-02-27 13 views
8

Sono un programmazione R e voglio leggere un file di testo in R.numeri lettura come stringhe

Una delle colonne, diciamo colonna 7 è numerica e ogni numero rappresenta un ID che voglio R a leggere i numeri come se fossero stringhe. E contare il numero di volte che ciascun ID appare nel file (in modo tale che dopo posso assegnare la frequenza di ciascun ID all'ID espressa Quest'ultimo uso) Ho provato

mydata<-(read.table(filename.txt)) 
ID=mydata[7] 
freq=table(ID) 

Questo funziona ma prende gli ID come numeri Ora ho provato

freq=table(as.character(ID)) 

Ma poi si prende l'intera ID colonna come una sola corda e da

summary(freq) 

ottengo

Number of cases in table: 1 
Number of factors: 1 
+0

formattato e aggiunto 'r' potrebbe trovare' R'. –

+0

@Julius quindi 'r' e' R' sono uguali? –

+0

@GrijeshChauhan, direi che è più comune chiamarlo R, ma qui il tag 'r' era corretto. – Julius

risposta

2

Penso che vi siete persi la virgola nella vostra dataframe .

mydata<-(read.table(filename.txt)) 
ID=mydata[,7] #added comma 
freq=table(as.character(ID)) 
9

Al momento della lettura dei dati nella cornice di dati dal file di testo è possibile specificare il tipo di ogni colonna utilizzando l'argomento colClasses. Vedi sotto un file avere nel mio computer:

> head(read.csv("R/Data/ZipcodeCount.csv")) 
    X zipcode stateabb countyno countyname 
1 1  401  NY  119 WESTCHESTER 
2 391  501  NY  103  SUFFOLK 
3 392  544  NY  103  SUFFOLK 
4 393  601  PR  1 ADJUNTAS 
5 630  602  PR  3  AGUADA 
6 957  603  PR  5 AGUADILLA 
> head(read.csv("R/Data/ZipcodeCount.csv",colClasses=c(rep("factor",5)))) 
    X zipcode stateabb countyno countyname 
1 1 00401  NY  119 WESTCHESTER 
2 391 00501  NY  103  SUFFOLK 
3 392 00544  NY  103  SUFFOLK 
4 393 00601  PR  001 ADJUNTAS 
5 630 00602  PR  003  AGUADA 
6 957 00603  PR  005 AGUADILLA 

> zip<-read.csv("R/Data/ZipcodeCount.csv",colClasses=c(rep("factor",5))) 
> str(zip) 
'data.frame': 53424 obs. of 5 variables: 
$ X   : Factor w/ 53424 levels "1","10000081",..: 1 36316 36333 36346 43638 52311 19581 23775 26481 26858 ... 
$ zipcode : Factor w/ 41174 levels "00401","00501",..: 1 2 3 4 5 6 6 7 8 9 ... 
$ stateabb : Factor w/ 60 levels ""," ","AK","AL",..: 41 41 41 46 46 46 46 46 46 46 ... 
$ countyno : Factor w/ 380 levels "","000","001",..: 106 95 95 3 5 7 5 7 7 9 ... 
$ countyname: Factor w/ 1925 levels "","ABBEVILLE",..: 1844 1662 1662 9 10 11 10 11 11 12 ... 
> head(table(zip[,"zipcode"])) 

00401 00501 00544 00601 00602 00603 
    1  1  1  1  1  2 

come si può vedere R non è più sta trattando zipcodes come numeri ma come fattori. Nel tuo caso devi specificare la classe delle prime 6 colonne e quindi scegliere factor come settimo. Quindi se le prime 6 colonne sono numeriche dovrebbe essere qualcosa come questo colClasses = c(rep("numeric",6),"factor").

4

senza as.character tuo table dovrebbe funzionare correttamente (cioè freq <- table(ID)), Citando ?table, l'input può essere:

uno o più oggetti che possono essere interpretate come fattori (tra stringhe di caratteri), oppure una lista (o un frame di dati) i cui componenti possono essere interpretati come . (Per as.table e as.data.frame, gli argomenti passati a metodi specifici.)