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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。