将因子转换为数字后,使用gsub显示强制

时间:2016-10-31 21:16:45

标签: r

与excel相比,我没有正确添加的数字,并且在删除逗号并将其转换为数字后仍显示NAs introduced by coercion。这些数字远远低于excel。

data$bigNumber <- as.numeric(gsub(",","",data$bigNumber ))

,其中

data$bigNumber <- c("552","513","1,512","1296","1,683","2,172","314","690","923","1,870","602","583","456","760","88","504","477","317","1,453","1,527")

顺便说一下,这是通过csv文件上传的,如果重要的话

1 个答案:

答案 0 :(得分:0)

如你所说,你应该看一下导致错误的原因,可能是数据中的一些“时髦数字”。您可以通过运行转换,然后回顾生成NA结果的值来执行此操作。您应该清楚地看到导致问题的原因。

这是你的示例数据集,其中有一个有意的“时髦数字”。

data <- data.frame( bigNumber = c("552","513","1,512","12-96","1,683","2,172","314","690","923","1,870","602","583","456","760","88","504","477","317","1,453","1,527") )

现在我们可以像你完成的那样创建一个矢量,但是不用替换我们输入的那个:

bigNumTest <- as.numeric( gsub( ",", "", data$bigNumber ) )

现在,由于引入了NAs,我们可以查看产生它们的值。

data[ is.na( bigNumTest ), "bigNumber" ]

在这种情况下,此处的输出为[1] "12-96",因此我们可以清楚地看到有一个连字符导致该问题。我们可以解决这个问题,或者,如果数据之间存在共同的问题(例如:随机丢弃的许多连字符,它们不应该在那里),我们可以运行一个额外的澄清步骤,以确保常见问题在数字转换(在这种情况下,它可以内置到您现有的gsub步骤中):

data$bigNumber <- as.numeric( gsub( ",|-", "", data$bigNumber ) )

-

-

-

注意:由于您在转换为数字之前在因子列上进行gsub转换,因此您将从您必须开始的因素(根据您的问题标题)强制转换字符向量。只要您知道这是必要步骤就可以了,但对于将因子转换为数字的任何人,请注意?factor中的警告:

  

警告

     

因子的解释取决于代码和“级别”属性。请注意比较具有相同级别的因子(按相同顺序)。特别是,as.numeric应用于一个因子是没有意义的,并且可能通过隐式强制发生。要将因子f转换为大约其原始数值,建议使用.numeric(levels(f))[f],并且比as.numeric(as.character(f))稍微更有效。