【问题标题】:Reading numbers as strings将数字读取为字符串
【发布时间】:2013-02-13 14:26:41
【问题描述】:

我是 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
  • @Julius 所以rR 是一样的吗?
  • @GrijeshChauhan,我想说叫它 R 更常见,但这里 r 标签是正确的。

标签: r file file-read formal-languages


【解决方案1】:

没有as.character,您的table 应该可以正常工作(即freq &lt;- table(ID)),引用?table,您的输入可以是:

一个或多个可以被解释为因素的对象(包括 字符串)或列表(或数据框),其组件可以是 如此解读。 (对于 as.table 和 as.data.frame,参数传递给 具体方法。)

【讨论】:

    【解决方案2】:

    在从文本文件将数据读入数据框中时,您可以使用 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 列的类,然后选择 factor 作为您的第七列。因此,如果前 6 列是数字,则应该是这样的 colClasses = c(rep("numeric",6),"factor")

    【讨论】:

      【解决方案3】:

      我认为您错过了数据框中的逗号。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-24
        • 2017-06-28
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        • 2013-01-15
        • 1970-01-01
        相关资源
        最近更新 更多