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

Modify a csv column data type from character to numeric to apply range function

csv文件内容如下:

此处马力列默认为字符。当我应用马力范围函数时:

    sapply(Auto[,4],range)

出现以下错误信息:

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

“范围”对因子没有意义

所以我尝试将字符转换为数字:

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

这会导致警告消息:

   NAs introduced by coercion 

经过上述步骤后,我也无法应用范围功能。 如何在马力列中使用范围函数?请注意,数据集包含一个字符“?”在马力栏行号 127.

你需要这个:

range(as.numeric(as.character(Auto$horsepower)), na.rm=TRUE)

如果你想把一个看起来是数字的因子转换成实际的数字,使用as.numeric(as.character())是正确的。对你来说,这引入了 NA,因为你有像“?”这样的值。在 horsepower 的列中,R 不知道如何转换“?”变成一个数字,所以它把它变成一个 NA。

现在,您可以计算 range,但您需要用参数 na.rm=TRUE.

告诉 range 到 "skip" NA

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

您可以使用 例如

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