2014-05-02 59 views
-1

我在一個數據集使用以下命令攜帶:轉換系數列於數字[R

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(數據)告訴我該列現在是num類型,但所有作爲因子的數字都是十進制形式,如7.2。當我進行轉換時,它會變成72,這是關閉的。有關如何解決這個問題的任何想法?

+1

也在read.csv中,您可以添加arg as.is = T和它會阻止轉換爲因子 – ZRoss

回答

1

在調用read.csv時,以下是列分類問題的可能解決方法。

假設我不想在將數據讀入R之後更改類,如果我想將一列設置爲character,將其他設置爲默認類,則可以使用readLines快速讀取第一行.csv(即列標題行,如果存在),並設置一個向量,以傳遞給參數read.csvcolClasses

這裏有一個簡單的功能,

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) 
} 

爲了說明其工作原理,假設我有一個名爲cats.csv文件(它只是恰巧,我這樣做),我知道我想要的權重列爲類character,其餘列爲默認類。請記住,colClasses可以是一個字符向量,對於NA的元素,相應的數據列將被跳過並歸類,就好像沒有讀取colClasses一樣。

查看列的名稱的文件中

names(read.csv('cats.csv')) 
## [1] "cats" "colour" "length" "weight" "mu" 

視圖缺省類從read.csv

> sapply(read.csv('cats.csv'), class) 
##  cats colour length weight  mu 
## "integer" "factor" "integer" "integer" "integer" 

樣品試驗:

(1)類的長度numeric在撥打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" 

(2)同樣,類重量character

> cc2 <- col.classes('cats.csv', 'weight', 'character') 
> rr2 <- read.csv('cats.csv', colClasses = cc2) 
> sapply(rr2, class) 
## cats  colour  length  weight   mu 
## "integer" "factor" "integer" "character" "integer" 

不知道有沒有什麼幫助你的。當我想要一些列類的混合時,我覺得它很有用,否則這些列類可能會變得笨重,並且一旦數據已經加載到R就會令人沮喪地改變。

+0

感謝您的帖子和很好的例子 –