将数字作为字符串读取

11
我是R编程的新手,想在R中读取一个文本文件。其中一列,比如第7列是数字,每个数字代表一个ID,我希望R将数字读取为字符串,并计算每个ID在文件中出现的次数(以便稍后可以将每个ID的频率分配给给定的ID以供以后使用)。我尝试过:
mydata<-(read.table(filename.txt))
ID=mydata[7]
freq=table(ID)

这个可以工作,但它将ID作为数字处理。现在我已经尝试过。
freq=table(as.character(ID))

但是它将整个列 ID 作为一个字符串,并且从中提取信息很困难。
summary(freq)

我得到了

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

只返回翻译后的文本:格式化并添加r,可以找到R - Grijesh Chauhan
@Julius,所以rR是一样的吗? - Grijesh Chauhan
@GrijeshChauhan,我认为更常见的是称其为R,但在这里使用'r'标签是正确的。 - Julius Vainora
3个回答

15

在从文本文件读取数据到数据框时,您可以使用colClasses参数指定每列的类型。下面是我电脑上有的一个文件:

> 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 

正如您所看到的,R不再将邮政编码视为数字,而是将其视为因子。在您的情况下,您需要指定前6列的类,然后选择第7列的factor。因此,如果前6列是数字,则应该像这样指定:colClasses = c(rep("numeric",6),"factor")


5
没有使用as.character,你的table应该可以正常工作(即freq <- table(ID)),引用自?table,你的输入可以是:
一个或多个可以被解释为因子(包括字符串)的对象,或者一个可以被解释为这样的列表(或数据框)的组件。(对于as.tableas.data.frame,传递给特定方法的参数。)

4

我觉得您的数据框中遗漏了逗号。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接