2016-11-04 31 views
1

我有一個csv,我在導入時定義類。一些列是整數類。我遇到的問題是,如果某些用戶在其中一列中寫入「三個」而不是「3」,則整個功能將停止工作。將整數列中的字符單元格轉換爲NA,位於read.csv

我想讓他做的是在導入時將任何文本轉換爲NA。我已經看到你可以使用na.strings = ...,但這將適用於所有列,對不對?我只想從一列中排除字符,而不是從整個csv中排除字符。

有沒有一個簡單的解決方案,或者我必須手動檢查每個列的這些值並將它們轉換爲NA?

編輯:附加信息: 這是我的代碼如下所示:

df <- read.csv(text=capture.output(write.csv(d.xxx,row.names=FALSE)), 
        colClasses=d.yyy, 
        header = TRUE) 

其中

d.xxx is a data frame containing the values and 
d.yyy is a list containing "integer","character",etc. in the correct order 

EDIT2:這是錯誤我得到:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : 
scan() expected 'a real', got '"2"' 
+0

如果列中有混合類,則可以在'read.csv'中指定'colClasses = c('integer','character')'等。因此,如果'colClasses'中指定的整數列中有'3',它將被轉換爲NA – akrun

+0

您可以在使用'as.numeric()'導入後更改列類型嗎?當你有角色時它會產生新生代。 – Hugo

+0

@akrun多數民衆贊成,我做了什麼,我希望會發生。相反,它不會導入文件,並說'預計真實的,得到了​​''' – Pablowa

回答

1

剛將該列作爲字符串導入,然後在data.frame的列上運行as.numeric() 。這將返回實數的數值向量和字符串元素的NAs。

+0

這可能是一種解決方法,但它會使事情複雜化,因爲列表「整數」,「字符」等是用戶生成的,因此使用read.csv()是非常有用的,因爲它允許我只是簡單地引用這個列表。 但我想如果沒有其他方式,我將不得不使用as.numeric()... – Pablowa

相關問題