我使用以下命令引入数据集:
rbc <- read.csv("rbc hgb.csv", header = T)
data <- rbc[rbc$Result_Value_After != "NULL",]
出于某种原因,rbc$Result_Value_After
被视为一个因素,所以我发出以下命令:
data$Result_Value_After <- as.numeric(data$Result_Value_After)
str(data)告诉我列现在是num
类型,但所有作为因子的数字都是十进制形式,如7.2。当我进行转换时,它会变为72,这是关闭的。关于如何解决此问题的任何想法?
答案 0 :(得分:1)
这是调用read.csv
时列分类问题的可能解决方法。
说我不想在将数据读入R后更改类。如果我想要一列是character
而其他列是默认类,我可以使用{{1}快速读取 .csv 的第一行(即列标题行,如果存在)并设置一个向量传递给readLines
的{{1}}参数。
这是一个简单的功能,
colClasses
为了说明这是如何工作的,假设我有一个名为 cats.csv 的文件(事实就是这样),我知道我想要重量列为类read.csv
,其余列为默认类。请注意,col.classes <- function(csv, col, class){
g <- readLines(csv, n = 1)
n <- unlist(strsplit(g, ","))
col.classes <- ifelse(n %in% col, class, NA)
return(col.classes)
}
可以是字符向量,对于character
的元素,会跳过相应的数据列,并将其归类为不使用colClasses
进行读取。
查看文件
中列的名称NA
查看colClasses
names(read.csv('cats.csv'))
## [1] "cats" "colour" "length" "weight" "mu"
示例运行
(1)在调用read.csv
时将长度列归为> sapply(read.csv('cats.csv'), class)
## cats colour length weight mu
## "integer" "factor" "integer" "integer" "integer"
,而将其他列作为各自的默认值
numeric
(2)同样,将 weight 列归类为read.csv
> cc1 <- col.classes('cats.csv', 'length', 'numeric')
> rr1 <- read.csv('cats.csv', colClasses = cc1)
> sapply(rr1, class)
## cats colour length weight mu
## "integer" "factor" "numeric" "integer" "integer"
不确定这对你有帮助吗?当我想要一个列类的混合时,我发现它很有用,否则一旦数据已经加载到R中,这些列类可能会变得笨拙和令人沮丧。