2012-01-27 12 views
2

考慮下面的代碼工作:串接在R數據幀的值並不如預期

> a <- data.frame(name=c('a','b','c')) 
> b <- data.frame(type=a$name[1]) 
> c <- data.frame(type=c(a$name[1],a$name[2])) 
> b 
    type 
1 a 
> c 
    type 
1 1 
2 2 

爲什麼b$type具有a的值,則實際分配的值,而c$type需要的索引號的值(12)?

回答

4

那麼,一個$ name是一個因子,而不是一個字符向量,你不能連接這樣的因子(因爲c函數當前不處理因子)。因素實際上是具有levels屬性(和類)的整數向量,所以c函數只是使用整數值。這可能被認爲是一個錯誤。

一至因子結合方式是通過使用unlist,其具有用於這種情況下特殊的代碼:

c <- data.frame(type=unlist(list(a$name[1], a$name[2]))) 

另一種方法是將轉換爲特徵向量:

c <- data.frame(type=c(as.character(a$name[1]), as.character(a$name[2]))) 

的第三種方式是從頭開始使用字符向量:

a <- data.frame(name=c('a','b','c'), stringsAsFactors=FALSE) 
c <- data.frame(type=c(a$name[1],a$name[2]))