2017-10-09 93 views
0

我有一個尺寸爲[1] 1 11[1] 3 29的數據框。我試圖將這兩個數據幀綁定在一起,使得具有一行的數據幀將被複制三次到結果數據幀。cbind拋出錯誤R

當我使用cbind,它的工作原理,但有時在data.frame拋出誤差作爲

錯誤(...,check.names = FALSE):參數意味着不同的行數:1,3

> dim(a) 
[1] 1 11 
> dim (b) 
[1] 3 29 
> cbind(a,b) 
Error in data.frame(..., check.names = FALSE) : 
arguments imply differing number of rows: 1, 3 

但是,如果我嘗試子集,它的工作原理。

> cbind(a[1:10],b) #Works Fine 
> cbind(a[1:11],b) #Throws Error 

注意:它有時會起作用,但如果我再次運行代碼,則不起作用。

感謝

回答

1

請參閱[cbind]documentation

如果有多個矩陣參數,它們必須具有相同的 數列(或行)的,這將是列數(或 行)的結果。

結果行將等於a和b的行號。

1

如果你讓他們成爲數據表,那麼你就再也沒有這個錯誤了。

cbind(iris[1:10, 1], iris[ 1:11,2:3]) # error 

cbind(iris[1:10, 1], iris[ 1:11,2]) # warning message, missing values are copied 
cbind(iris[1:10, 1], iris[ 1:11,2:3] %>% as.data.table()) # same 
cbind(iris[1:10, 1] %>% as.data.table(), iris[ 1:11,2:3])# same 
     . Sepal.Width Petal.Length 
1: 5.1   3.5   1.4 
2: 4.9   3.0   1.4 
3: 4.7   3.2   1.3 
4: 4.6   3.1   1.5 
5: 5.0   3.6   1.4 
6: 5.4   3.9   1.7 
7: 4.6   3.4   1.4 
8: 5.0   3.4   1.5 
9: 4.4   2.9   1.4 
10: 4.9   3.1   1.5 
11: 5.1   3.7   1.5 


# you can also make the extra values as zero or NA etc 
temp <- iris[1:10,1] %>% as.data.table() 
temp <- temp[match(rownames(iris[ 1:11,2:3]), rownames(temp[1:10, 1]))] 
# temp[is.na(temp)] <- "" 
cbind(temp %>% as.data.table(), iris[ 1:11,2:3]) 

     . Sepal.Width Petal.Length 
1: 5.1   3.5   1.4 
2: 4.9   3.0   1.4 
3: 4.7   3.2   1.3 
4: 4.6   3.1   1.5 
5: 5.0   3.6   1.4 
6: 5.4   3.9   1.7 
7: 4.6   3.4   1.4 
8: 5.0   3.4   1.5 
9: 4.4   2.9   1.4 
10: 4.9   3.1   1.5 
11: NA   3.7   1.5