将 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 = "?")
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 = "?")