我正在導入3列CSV文件。最後一列是一系列條目,它們是整數或引號中的字符串。讀取csv文件,在一列中包含數字和字符串
這裏有一系列的例子條目:
1,4,"m"
1,5,20
1,6,"Canada"
1,7,4
1,8,5
當我導入此使用read.csv,這些都只是上繳因素。
我該如何設置它們以便將它們讀作整數和字符串?
謝謝!
我正在導入3列CSV文件。最後一列是一系列條目,它們是整數或引號中的字符串。讀取csv文件,在一列中包含數字和字符串
這裏有一系列的例子條目:
1,4,"m"
1,5,20
1,6,"Canada"
1,7,4
1,8,5
當我導入此使用read.csv,這些都只是上繳因素。
我該如何設置它們以便將它們讀作整數和字符串?
謝謝!
這是不可能的,因爲給定的載體可以僅具有單個模式(例如character
,numeric
,或者logical
)。
然而,可以將矢量分割成兩個分開的載體,一個具有數字值和與字符值,第二:
vec <- c("m", 20, "Canada", 4, 5)
vnum <- as.numeric(vec)
vchar <- ifelse(is.na(vnum), vec, NA)
vnum
[1] NA 20 NA 4 5
vchar
[1] "m" NA "Canada" NA NA
編號A數據幀是一系列粘貼在一起向量(向量的列表或矩陣)。因爲每一列都是一個向量,所以它不能被歸類爲整數和因子。它必須是一個或另一個。你可以將矢量拆分爲數字和因子(每個都有一個acolumn),但我不相信這是你想要的。
編輯儘管OP決定接受這個答案,@ Andrie的答案是首選的解決方案。我的答案僅僅是爲了通知數據幀的一些奇怪特徵。
正如其他人所指出的,簡短的回答是,這是不可能的。 data.frame
s旨在包含單個原子類型的列。 @安德里的建議是一個很好的建議,但只是爲了踢,我認爲我會指出一種方法來將這種類型的數據刻入data.frame
。
您可以將違規列轉換爲列表(此代碼假定您已經設置options(stringsAsFactors = FALSE)
):
dat <- read.table(textConnection("1,4,'m'
1,5,20
1,6,'Canada'
1,7,4
1,8,5"),header = FALSE,sep = ",")
tmp <- as.list(as.numeric(dat$V3))
tmp[c(1,3)] <- dat$V3[c(1,3)]
dat$V3 <- tmp
str(dat)
'data.frame': 5 obs. of 3 variables:
$ V1: int 1 1 1 1 1
$ V2: int 4 5 6 7 8
$ V3:List of 5
..$ : chr "m"
..$ : num 20
..$ : chr "Canada"
..$ : num 4
..$ : num 5
現在,有種種原因,爲什麼這是一個壞主意。舉個例子,很多你期望和data.frame
很好地搭配的代碼不會這樣,並且要麼失敗,要麼表現得很奇怪。但我想我會把它當作一種好奇心指出來。
安德麗你說的和我一樣,但更好。 –
@ user718281,讀爲字符串,而不是因素,使用read.csv(...,stringsAsFactors = FALSE) – Max
感謝Andrie。 有一件事我不太確定該怎麼做,但我該如何從csv文件轉到矢量。如在,我的理解是,read.csv輸出一個矩陣,而不是一個向量。 – evt