【问题标题】:Convert Factors to Numeric in bulk, matrix method does not work将因子批量转换为数值,矩阵方法不起作用
【发布时间】:2013-12-05 23:31:07
【问题描述】:

您好,我正在尝试将 html 表作为 data.frame 导入,并且列作为因素进来。我需要将它们转换为数字,我可以这样做,但是当我使用单一方法时,它会花费很长时间并将它们转换为矩阵修剪数字。有人可以解释如何将 2:6 列中的所有数字转换为保持正确数字长度的数字吗?

nms = c("State/Territory", "FY 2008"  ,"FY 2009",   "FY 2010", "FY 2011",   "FY 2012") 
x <- data.frame(readHTMLTable('http://www.fns.usda.gov/pd/15SNAPpartPP.htm'), stringsAsFactors = F) 
x <- x[5:57,] 
names(x) <- nms 
snap.partpp <- x 

这是我试图解决这个问题的方法,但它会进行转换但会改变数字的值

x <- data.frame(readHTMLTable('http://www.fns.usda.gov/pd/15SNAPpartPP.htm'), stringsAsFactors = F) 
y <- x[5:57, 1] 
x <- data.matrix(x[5:57,2:6]) 
xy <- data.frame(y, x) 
names(xy) <- nms 
snap.avghh <- xy 

【问题讨论】:

  • stringsAsFactors 应该是 readHTMLTable 而不是 data.frame 的参数。
  • ...您可能需要在转换为数字之前手动删除所有逗号。

标签: r dataframe numeric factors


【解决方案1】:

答案就在 cmets 中,但这是您的想法吗?

sapply(x[,2:6],function(x){as.numeric(gsub(",","",x))})

产生这个:

      FY 2008  FY 2009  FY 2010  FY 2011  FY 2012
 [1,]    56977    64385    76445    86044    91298
 [2,]   627660   813987  1018171  1067617  1123974
 [3,]   377883   411153   466598   486451   502125
 [4,]  2220127  2670341  3238548  3672980  3964221
 [5,]   252933   319121   404679   453103   491630
 [6,]   225383   258165   336064   378677   403466
 [7,]    74429    90933   112513   134927   148257
 [8,]    89442   103311   118493   134845   141147
 [9,]  1454928  1952362  2603185  3074671  3353064
[10,]  1021155  1286078  1591078  1780039  1912839
[11,]    27874    31511    36926    40631    43727 [truncated...]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-10
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多