2017-10-09 19 views
0

私はデータフレームが[1] 1 11[1] 3 29です。私はこれらの2つのデータフレームをバインドして、1つの行を持つデータフレームが結果のデータフレームに3回コピーされるようにしています。cbind throwing error in 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