2012-03-29 218 views

回答

3

也許出於R的精確原因告訴你它出錯了:你試圖cbind的兩個項目在一起有不同的行數。

您的數據幀d是emtpy,因此有0行。顯然你的數據框data(你向我們提供了零信息,順便說一下)有132680行。

可能有更好的方法來做你正在嘗試的東西(cbind for循環中的ing列往往不是非常理想的),但很難提出一個沒有更多細節的解決方案。

+1

S /往往不是非常最佳/往往是一個可怕的想法 – 2012-03-29 19:43:25

+0

我的想法是,提取和重新-combine現有數據框的列特定purpose.Eg:我覺得data.frame(的列)是從read.csv()語句進口的結果,有時日期列讀取作爲人物類。另一個原因是,我只需要從read.csv語句創建的data.frame()中的幾列。我沒有意識到在for循環之前初始化的data.frame()需要填充一個列向量,其行長等於任何解析爲cbind()的對象的行長 – Vni 2012-03-30 14:59:53

0

可以根據上面的內容破解解決方案,但可能不想。你的目標是什麼?

d <- data.frame(matrix(ncol=0,nrow=5),stringsAsFactors=FALSE) 
set.seed(101) 
dat <- matrix(sample(LETTERS,replace=TRUE,size=10),ncol=2) 
for (i in 1:ncol(dat)) { d <- cbind(d,dat[,i])} 
d2 <- as.data.frame(dat,stringsAsFactors=FALSE) 

在該特定示例datcharacter的矩陣; d是有兩個factor列的數據幀(stringsAsFactors=FALSE設置數據幀的屬性,所以你以後的cbind()電話誘導轉化爲因素反正!);和d2也許是(???)你想要的東西,轉換成數據幀中的原始數據集...

> str(dat) 
chr [1:5, 1:2] "J" "B" "S" "R" "G" "H" "P" "I" "Q" "O" 
> str(d) 
'data.frame': 5 obs. of 2 variables: 
$ dat[, i]: Factor w/ 5 levels "B","G","J","R",..: 3 1 5 4 2 
$ dat[, i]: Factor w/ 5 levels "H","I","O","P",..: 1 4 2 5 3 
> str(d2) 
'data.frame': 5 obs. of 2 variables: 
$ V1: chr "J" "B" "S" "R" ... 
$ V2: chr "H" "P" "I" "Q" ...