2014-01-12 50 views
2
> test <- data.frame() 
> test<-rbind(test,c("hi","i","am","bob")) 
> test<-rbind(test,c("hi","i","am","alice")) 
Warning message: 
In `[<-.factor`(`*tmp*`, ri, value = "alice") : 
    invalid factor level, NAs generated 

這個最小的例子爲什麼產生這個錯誤?我想追加幾個字符串行到一個空的數據框。rbind char向量到數據幀

+1

請幫助我們爲我們提供了一個可重複的例子(即代碼和示例數據)幫你,看http://stackoverflow.com/questions/5963269/how-to詳情請參閱-ma-r-reproducible-example。 –

+0

你正在做的事情你不應該做,不應該做的,即,你不應該創建一個空的對象,並在一個循環中成長。我也不明白你爲什麼使用'sprintf'。如果必須,請輸入數字並使用「round」或「signif」。 – Roland

+0

嗨保羅,我剛剛注意到,我基本上可以減少我的問題:爲什麼data4plotting <-data.frame()plus data4plotting <-rbind(data4plotting,c(「hi」,「I」,「am」 ,「Bob」))會產生一個包含因素的數據框?我希望它產生一個字符串data.frame! – user3182532

回答

5

您可以將信息存儲在字符矩陣中。當然,您可以使用as.data.frame和參數stringsAsFactors = FALSE將此矩陣轉換爲數據幀。

> test <- matrix(c("hi","i","am","bob"), nrow = 1) 
> test <- rbind(test, c("hi","i","am","alice")) 
> test 
    [,1] [,2] [,3] [,4] 
[1,] "hi" "i" "am" "bob" 
[2,] "hi" "i" "am" "alice" 

> testDF <- as.data.frame(test, stringsAsFactors = FALSE) 
> testDF <- rbind(testDF, c("hi","i","am","happy")) 
> testDF 
    V1 V2 V3 V4 
1 hi i am bob 
2 hi i am alice 
3 hi i am happy 
4

問題是,R默認情況下將字符理解爲因子。 爲了避免這種行爲:

options(stringsAsFactors = FALSE) 
test <- data.frame() 
test<-rbind(test,c("hi","i","am","bob")) 
test<-rbind(test,c("hi","i","am","alice"))