cbind
位於 base
包(package)。 說明
獲取向量、矩陣或 data-frame 參數的序列並按以下方式組合c列或rows,分別。這些是通用函數,具有其他方法R類。
用法
cbind(..., deparse.level = 1)
rbind(..., deparse.level = 1)
## S3 method for class 'data.frame'
rbind(..., deparse.level = 1, make.row.names = TRUE,
stringsAsFactors = FALSE, factor.exclude = TRUE)
參數
... |
(廣義)向量或矩陣。這些可以作為命名參數給出。其他R可以適當地強製對象,或者可以使用 S4 方法:請參閱“詳細信息”和“值”部分。 (為了 |
deparse.level |
在非類矩陣參數的情況下控製標簽構造的整數(對於默認方法): |
make.row.names |
(僅適用於 DataFrame 方法:)邏輯指示是否應從參數構造唯一且有效的 |
stringsAsFactors |
邏輯,傳遞給 |
factor.exclude |
如果 DataFrame 包含因子,則默認 |
細節
函數 cbind
和 rbind
是 S3 通用函數,具有數據幀方法。如果至少一個參數是 DataFrame ,其餘參數是向量或矩陣,則將使用 DataFrame 方法。還可以有其他方法;特別是,有一個用於時間序列對象的。有關如何選擇要使用的方法的信息,請參閱“調度”部分。如果某些參數屬於 S4 類,即 isS4(.)
為 true,則還會查找 S4 方法,並且可能會調用包 methods
中的隱藏 cbind
/rbind
函數,這些函數又分別構建在cbind2
或 rbind2
。在這種情況下,與默認方法類似,遵循 deparse.level
。
在默認方法中,所有向量/矩陣必須是原子的(請參閱vector
)或列表。不允許使用表達式。語言對象(例如公式和調用)和配對列表將被強製為列表:其他對象(例如名稱和外部指針)將作為元素包含在列表結果中。輸入可能具有的任何類都將被丟棄(特別是,因子被其內部代碼替換)。
如果有多個矩陣參數,它們必須具有相同的列數(或行數),這將是結果的列數(或行數)。如果所有參數都是向量,則結果中的列(行)數等於最長向量的長度。較短參數中的值將被回收以達到此長度(如果僅部分回收,則使用 warning
)。
當參數由矩陣和向量混合組成時,結果的列(行)數由矩陣參數的列(行)數確定。任何向量都會對其值進行回收或子集化以達到此長度。
為了cbind
(rbind
),零長度向量(包括NULL
)將被忽略,除非結果為零行(列),以實現 S 兼容性。 (Zero-extent 矩陣不會出現在 S3 中,並且不會在 S3 中被忽略R.)
矩陣限製為小於R3.2.0 允許具有更多元素(但滿足行和列限製)的輸入矩陣。
即使在 64 位係統上也可以顯示行和列。因此輸入向量具有相同的長度限製:從值
對於默認方法,是按列或按行組合 ...
參數的矩陣。 (異常:如果沒有輸入或所有輸入均為 NULL
,則值為 NULL
。)
矩陣結果的類型由層次結構中任何輸入的最高類型確定 raw <邏輯<整數<雙精度<複雜<字符<列表。
對於 cbind
( rbind
),如果參數是類似矩陣的,則列(行)名稱取自參數的 colnames
( rownames
)。否則,從參數名稱或未提供參數的名稱和 deparse.level > 0
,通過解析給定的表達式,僅當給出合理名稱時才為 deparse.level = 1
(‘symbol’,請參閱 is.symbol
)。
對於 cbind
,行名稱取自具有適當名稱的第一個參數:矩陣的行名稱,或長度為結果行數的向量的名稱。
對於rbind
,列名稱取自具有適當名稱的第一個參數:矩陣的列名稱,或長度為結果列數的向量的名稱。
DataFrame 方法
cbind
數據幀方法隻是 data.frame(..., check.names = FALSE)
的包裝。這意味著它將拆分數據幀參數中的矩陣列,並將字符列轉換為因子,除非指定了 stringsAsFactors = FALSE
。
rbind
數據幀方法首先刪除所有zero-column 和zero-row 參數。 (如果沒有,則返回第一個帶有列的參數,否則返回 zero-column zero-row DataFrame 。)然後,它從第一個 DataFrame 中獲取列的類,並按名稱(而不是按位置)匹配列。因子的級別根據需要擴展(按照遇到的因子的級別集的級別的順序),並且當且僅當所有組件都是有序因子時,結果才是有序因子。 (最後一點與 S-PLUS 不同。)Old-style 類別(帶級別的整數向量)被提升為因子。
請注意,對於結果列 j
,應用 factor(., exclude = X(j))
,其中
X(j) := if(isTRUE(factor.exclude)) { if(!NA.lev[j]) NA # else NULL } else factor.exclude
其中 NA.lev[j]
為 true,當且僅當任何貢獻數據幀在 j
列中具有顯式 NA
級別的 factor
。
派遣
方法調度不是通過 UseMethod()
完成的,而是通過 C-internal 調度完成的。因此,不需要 rbind.default
等。
調度算法在源文件中說明(‘.../src/main/bind.c') 作為
-
對於每個參數,我們從類屬性中獲取可能的類成員資格列表。
-
我們依次檢查每個類,看看是否有適用的方法。
-
如果我們找到一種方法,我們就會使用它。否則,如果參數中有 S4 對象,我們嘗試 S4 調度;否則,我們使用默認代碼。
如果要將其他對象與 DataFrame 組合,可能需要首先將它們強製為 DataFrame 。 (請注意,如果所有參數都是數據幀或向量,則此算法可能會導致調用數據幀方法,這將導致將字符向量強製轉換為因子。)
例子
m <- cbind(1, 1:7) # the '1' (= shorter vector) is recycled
m
m <- cbind(m, 8:14)[, c(1, 3, 2)] # insert a column
m
cbind(1:7, diag(3)) # vector is subset -> warning
cbind(0, rbind(1, 1:3))
cbind(I = 0, X = rbind(a = 1, b = 1:3)) # use some names
xx <- data.frame(I = rep(0,2))
cbind(xx, X = rbind(a = 1, b = 1:3)) # named differently
cbind(0, matrix(1, nrow = 0, ncol = 4)) #> Warning (making sense)
dim(cbind(0, matrix(1, nrow = 2, ncol = 0))) #-> 2 x 1
## deparse.level
dd <- 10
rbind(1:4, c = 2, "a++" = 10, dd, deparse.level = 0) # middle 2 rownames
rbind(1:4, c = 2, "a++" = 10, dd, deparse.level = 1) # 3 rownames (default)
rbind(1:4, c = 2, "a++" = 10, dd, deparse.level = 2) # 4 rownames
## cheap row names:
b0 <- gl(3,4, labels=letters[1:3])
bf <- setNames(b0, paste0("o", seq_along(b0)))
df <- data.frame(a = 1, B = b0, f = gl(4,3))
df. <- data.frame(a = 1, B = bf, f = gl(4,3))
new <- data.frame(a = 8, B ="B", f = "1")
(df1 <- rbind(df , new))
(df.1 <- rbind(df., new))
stopifnot(identical(df1, rbind(df, new, make.row.names=FALSE)),
identical(df1, rbind(df., new, make.row.names=FALSE)))
參考
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
也可以看看
c
將向量(和列表)組合為向量,data.frame
將向量和矩陣組合為數據幀。
相關用法
- R chartr 字符翻譯和裝箱
- R chol2inv Cholesky(或 QR)分解的逆分解
- R cumsum 累積和、乘積和極值
- R col 列索引
- R character 字符向量
- R c 將值組合到向量或列表中
- R conditions 狀況處理和恢複
- R cut 將數字轉換為因子
- R class 對象類
- R connections 操作連接的函數(文件、URL...)
- R comment 查詢或設置“評論”屬性
- R complex 複數和基本函數
- R chooseOpsMethod 選擇適當的操作方法
- R colSums 形成行和列的總和及平均值
- R chol 喬列斯基分解
- R commandArgs 提取命令行參數
- R crossprod 矩陣叉積
- R curlGetHeaders 從 URL 中檢索標頭
- R cat 連接並打印
- R capabilities 此 R 版本的報告函數
- R callCC 調用當前延續
- R call 函數調用
- R charmatch 部分字符串匹配
- R chkDots 警告調用者的“...”中存在無關參數
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Combine R Objects by Rows or Columns。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。