2013-02-27 13 views
8

jestem nowy w programowaniu R i chcę, aby odczytać plik tekstowy w R.Czytanie liczb jako ciągi

jednej z kolumn, powiedzmy kolumna 7 jest numeryczne i każdy numer reprezentuje identyfikator Chcę R czytać liczby tak, jakby były strunami. I policzyć, ile razy każdy identyfikator pojawi się w pliku (tak, że później mogę przypisać częstotliwość każdego identyfikatora z danym identyfikatorem ostatniego użycia) próbowałem

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

To działa, ale zajmuje identyfikatory jako liczby. Teraz próbowałem

freq=table(as.character(ID)) 

Ale to trwa całe kolumny identyfikator jak tylko jeden ciąg iz

summary(freq) 

uzyskać

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

sformatowany i dodane 'r' może znaleźć' R'. –

+0

@Julius, więc 'r' i' R' są takie same? –

+0

@GrijeshChauhan, powiedziałbym, że jest bardziej powszechne nazywanie go R, ale tutaj znacznik 'r' był poprawny. – Julius

Odpowiedz

2

myślę przegapiłeś przecinek w dataframe .

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

W czasie odczytywania danych w ramce danych z pliku tekstowego można określić typ każdej kolumny przy użyciu colClasses argument. Zobacz poniżej plik w moim komputerze:

> 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 

jak widać R nie traktuje już kodów zip jako liczb, ale jako czynniki. W twoim przypadku musisz określić klasę pierwszych 6 kolumn, a następnie wybrać factor jako siódmą. Więc jeśli pierwsze 6 kolumn jest numerycznych, powinno być coś takiego: colClasses = c(rep("numeric",6),"factor").

4

bez as.character Twój table powinny działać poprawnie (tj freq <- table(ID)) Cytując ?table, Twój wkład może być:

jednego lub więcej obiektów, które mogą być interpretowane jako czynników (w tym ciągów znaków), lub listę (lub ramkę danych), której komponenty mogą być interpretowane tak, jak . (Dla as.table i as.data.frame, argumenty przekazane do specyficznych metod .)

Powiązane problemy