将因子转换为列到数字R.

时间:2014-05-02 19:15:08

标签: r numeric r-factor

我使用以下命令引入数据集:

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,这是关闭的。关于如何解决此问题的任何想法?

1 个答案:

答案 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中,这些列类可能会变得笨拙和令人沮丧。