當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R cbind 按行或列組合 R 對象


R語言 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 方法:請參閱“詳細信息”和“值”部分。 (為了"data.frame"的方法cbind這些可以作為進一步的參數data.framestringsAsFactors.)

deparse.level

在非類矩陣參數的情況下控製標簽構造的整數(對於默認方法):
deparse.level = 0不構造標簽;
默認值deparse.level = 1通常和deparse.level = 2始終從參數名稱構造標簽,請參閱下麵的“值”部分。

make.row.names

(僅適用於 DataFrame 方法:)邏輯指示是否應從參數構造唯一且有效的row.names

stringsAsFactors

邏輯,傳遞給as.data.frame;僅當 ... 參數包含(非 data.frame )character 時才有效。

factor.exclude

如果 DataFrame 包含因子,則默認TRUE確保NA因子水平保持不變,參見公關#17562和“ DataFrame 方法”。在R版本高達 3.6.x,factor.exclude = NA已被隱式硬編碼(R<= 3.6.0) 或默認值 (R= 3.6.x,x >= 1)。

細節

函數 cbindrbind 是 S3 通用函數,具有數據幀方法。如果至少一個參數是 DataFrame ,其餘參數是向量或矩陣,則將使用 DataFrame 方法。還可以有其他方法;特別是,有一個用於時間序列對象的。有關如何選擇要使用的方法的信息,請參閱“調度”部分。如果某些參數屬於 S4 類,即 isS4(.) 為 true,則還會查找 S4 方法,並且可能會調用包 methods 中的隱藏 cbind /rbind 函數,這些函數又分別構建在cbind2rbind2 。在這種情況下,與默認方法類似,遵循 deparse.level

在默認方法中,所有向量/矩陣必須是原子的(請參閱vector)或列表。不允許使用表達式。語言對象(例如公式和調用)和配對列表將被強製為列表:其他對象(例如名稱和外部指針)將作為元素包含在列表結果中。輸入可能具有的任何類都將被丟棄(特別是,因子被其內部代碼替換)。

如果有多個矩陣參數,它們必須具有相同的列數(或行數),這將是結果的列數(或行數)。如果所有參數都是向量,則結果中的列(行)數等於最長向量的長度。較短參數中的值將被回收以達到此長度(如果僅部分回收,則使用 warning)。

當參數由矩陣和向量混合組成時,結果的列(行)數由矩陣參數的列(行)數確定。任何向量都會對其值進行回收或子集化以達到此長度。

為了cbind(rbind),零長度向量(包括NULL)將被忽略,除非結果為零行(列),以實現 S 兼容性。 (Zero-extent 矩陣不會出現在 S3 中,並且不會在 S3 中被忽略R.)

矩陣限製為小於 即使在 64 位係統上也可以顯示行和列。因此輸入向量具有相同的長度限製:從R3.2.0 允許具有更多元素(但滿足行和列限製)的輸入矩陣。

對於默認方法,是按列或按行組合 ... 參數的矩陣。 (異常:如果沒有輸入或所有輸入均為 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') 作為

  1. 對於每個參數,我們從類屬性中獲取可能的類成員資格列表。

  2. 我們依次檢查每個類,看看是否有適用的方法。

  3. 如果我們找到一種方法,我們就會使用它。否則,如果參數中有 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-devel大神的英文原創作品 Combine R Objects by Rows or Columns。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。