将csv列数据类型从字符修改为数字以应用范围函数

时间:2018-08-28 04:44:13

标签: r rstudio sapply read.csv

csv文件的内容如下: Data set with details of an automobile

默认情况下,列功率为字符。当我将范围函数应用于马力中时:

    sapply(Auto[,4],range)

出现以下错误消息:

    Error in Summary.factor(17L, na.rm = FALSE) : 

“范围”对因素没有意义

所以我试图将字符隐蔽为数字:

   as.numeric(as.character(Auto$horsepower))

这将导致警告消息:

   NAs introduced by coercion 

在完成上述步骤后,我也无法应用范围功能。 如何在马力栏中使用范围功能?请注意,数据集包含字符“?”在功率列第127行中。

2 个答案:

答案 0 :(得分:1)

您需要这个:

<div>
  <select>
    <option value="08/27/2018 - 08/31/2018">08/27/2018 - 08/31/2018</option>
    <option value="09/10/2018 - 09/14/2018">09/10/2018 - 09/14/2018</option>
  </select>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

如果要将数值因子转换为实际数值,则使用range(as.numeric(as.character(Auto$horsepower)), na.rm=TRUE) 是正确的。对您来说,这引入了NA,因为您具有诸如“?”之类的值。 as.numeric(as.character())的列中,R不知道如何将“?”转换为数字,因此将其转换为NA。

现在,您可以计算horsepower,但是需要告诉range使用参数range“跳过” NA。

答案 1 :(得分:1)

此处的根本问题是,将CSV文件读入R时,horsepower被转换为一个因子。这是由于存在?字符所致。

您可以使用例如

避免这种情况
Auto <- read.csv("myfile.csv", 
                 stringsAsFactors = FALSE, 
                 na.strings = "?")