Extract.data.frame
位于 base
包(package)。 说明
提取或替换数据帧的子集。
用法
## S3 method for class 'data.frame'
x[i, j, drop = ]
## S3 replacement method for class 'data.frame'
x[i, j] <- value
## S3 method for class 'data.frame'
x[[..., exact = TRUE]]
## S3 replacement method for class 'data.frame'
x[[i, j]] <- value
## S3 replacement method for class 'data.frame'
x$name <- value
参数
x |
DataFrame 。 |
i, j, ... |
要提取或替换的元素。对于 |
name |
|
drop |
合乎逻辑的。如果 |
value |
合适的替换值:如有必要,它将重复多次,并且可能会被强制:请参阅强制部分。如果是 |
exact |
逻辑:请参阅 |
细节
数据帧可以通过多种模式进行索引。当 [
和 [[
与单个向量索引( x[i]
或 x[[i]]
)一起使用时,它们会像列表一样对数据帧进行索引。在此用法中,drop
参数将被忽略,并出现警告。
$
没有 data.frame
方法,因此 x$name
使用默认方法,将 x
视为列表(如果匹配唯一,则部分匹配列名,请参阅 Extract
)。替换方法(针对 $
)检查 value
的行数是否正确,并在必要时进行复制。
当 [
和 [[
与两个索引( x[i, j]
和 x[[i, j]]
)一起使用时,它们的作用类似于索引矩阵:[[
只能用于选择一个元素。请注意,对于每个选定的列,例如xj
(如果不是类似矩阵),结果列将为xj[i]
,因此依赖于相应的[
方法,请参阅示例部分。
如果 [
返回一个数据帧,它将具有唯一(且非缺失)的行名称,如有必要,请使用 make.unique
转换行名称。同样,如果选择了列,则如有必要,列名称将转换为唯一的(例如,如果多次选择列,或者如果 DataFrame 具有重复的列名称,则选择给定名称的多个列)。
当 drop = TRUE
时,这适用于数据帧中包含的任何矩阵的子集以及数据帧本身。
替换方法可用于通过指定不存在的列来添加整个列,在这种情况下,列将添加到 DataFrame 的右侧边,并且数字索引必须与现有指数。另一方面,可以在当前最后一行之后的任何行添加行,并且列将是带有缺失值的in-filled。索引中的缺失值不允许替换。
对于[
,替换值可以是一个列表:列表的每个元素用于替换(部分)一列,并根据需要回收列表。如果创建了按编号指定的列,则使用相应列表元素的名称(如果有)来命名这些列。如果替换不是选择行,则列表值可以包含 NULL
元素,这将导致相应的列被删除。 (参见示例。)
不建议使用 [
进行矩阵索引(带有逻辑或 2 列整数矩阵的 x[i]
i
)。为了进行提取,x
首先被强制转换为矩阵。对于替换,逻辑矩阵索引必须与 x
具有相同的维度。一次替换一列,可能会发生多种类型强制。
[
和 [[
提取方法都部分匹配行名称。默认情况下,两者都不会部分匹配列名称,但如果 exact = FALSE
则 [[
会部分匹配(如果 exact =
NA
则会出现警告)。如果您想精确匹配行名称,请使用 match
,如示例中所示。
值
对于[
DataFrame 、列表或单列(后两者仅在维度被删除时)。如果使用矩阵索引来提取向量结果。如果结果是数据帧,则如果选择未定义的列,则会出现错误(因为数据帧中没有 'missing' 列的一般概念)。否则,如果选择单个列并且未定义,则结果为 NULL
。
对于[[
数据帧的一列或NULL
(使用一个索引提取)或长度为一的向量(使用两个索引提取)。
对于 $
,数据帧的列(或 NULL
)。
对于 [<-
、 [[<-
和 $<-
,一个数据帧。
强迫
强制重置值的情况是一个复杂的情况,并且在R的发展。本节仅供参考。
当 [
和 [[
用于添加或替换整个列时,不会发生强制转换,但如果精确的重复次数可以将 value
复制(通过调用通用函数 rep
)到正确的长度使用。
当 [
与逻辑矩阵一起使用时,每个值都被强制为其要放入的列的类型。
当 [
和 [[
与两个索引一起使用时,将根据需要强制列以容纳该值。
请注意,当替换值是数组(包括矩阵)时,它不会被视为一系列列(如 data.frame
和 as.data.frame
那样),而是作为单个列插入。
警告
仅剩一行时的默认行为相当于指定 drop = FALSE
。要从 DataFrame 删除到列表,必须显式指定drop = TRUE
。
不应命名 drop
和 exact
以外的参数:如果命名,则会出现警告,并且行为与此处的说明不同。
例子
sw <- swiss[1:5, 1:4] # select a manageable subset
sw[1:3] # select columns
sw[, 1:3] # same
sw[4:5, 1:3] # select rows and columns
sw[1] # a one-column data frame
sw[, 1, drop = FALSE] # the same
sw[, 1] # a (unnamed) vector
sw[[1]] # the same
sw$Fert # the same (possibly w/ warning, see ?Extract)
sw[1,] # a one-row data frame
sw[1,, drop = TRUE] # a list
sw["C", ] # partially matches
sw[match("C", row.names(sw)), ] # no exact match
try(sw[, "Ferti"]) # column names must match exactly
sw[sw$Fertility > 90,] # logical indexing, see also ?subset
sw[c(1, 1:2), ] # duplicate row, unique row names are created
sw[sw <= 6] <- 6 # logical matrix indexing
sw
## adding a column
sw["new1"] <- LETTERS[1:5] # adds a character column
sw[["new2"]] <- letters[1:5] # ditto
sw[, "new3"] <- LETTERS[1:5] # ditto
sw$new4 <- 1:5
sapply(sw, class)
sw$new # -> NULL: no unique partial match
sw$new4 <- NULL # delete the column
sw
sw[6:8] <- list(letters[10:14], NULL, aa = 1:5)
# update col. 6, delete 7, append
sw
## matrices in a data frame
A <- data.frame(x = 1:3, y = I(matrix(4:9, 3, 2)),
z = I(matrix(letters[1:9], 3, 3)))
A[1:3, "y"] # a matrix
A[1:3, "z"] # a matrix
A[, "y"] # a matrix
stopifnot(identical(colnames(A), c("x", "y", "z")), ncol(A) == 3L,
identical(A[,"y"], A[1:3, "y"]),
inherits (A[,"y"], "AsIs"))
## keeping special attributes: use a class with a
## "as.data.frame" and "[" method;
## "avector" := vector that keeps attributes. Could provide a constructor
## avector <- function(x) { class(x) <- c("avector", class(x)); x }
as.data.frame.avector <- as.data.frame.vector
`[.avector` <- function(x,i,...) {
r <- NextMethod("[")
mostattributes(r) <- attributes(x)
r
}
d <- data.frame(i = 0:7, f = gl(2,4),
u = structure(11:18, unit = "kg", class = "avector"))
str(d[2:4, -1]) # 'u' keeps its "unit"
也可以看看
subset
通常更容易提取, data.frame
、 Extract
。
相关用法
- R Extract.factor 提取或替换部分因子
- R Extract 提取或替换对象的部分
- R Extremes 最大值和最小值
- R Encoding 读取或设置字符向量声明的编码
- R file.path 构造文件路径
- R grep 模式匹配和替换
- R getwd 获取或设置工作目录
- R vector 向量 - 创建、强制等
- R lapply 对列表或向量应用函数
- R dump R 对象的文本表示
- R Sys.getenv 获取环境变量
- R rank 样本排名
- R getDLLRegisteredRoutines DLL 中 C/Fortran 例程的反射信息
- R pushBack 将文本推回连接
- R strsplit 分割字符向量的元素
- R seq.Date 生成规则的日期序列
- R invisible 将打印模式更改为不可见
- R noquote “无引号”字符串打印类
- R warning 警告信息
- R rapply 递归地将函数应用于列表
- R basename 操作文件路径
- R with 评估数据环境中的表达式
- R formals 访问和操纵形式参数
- R icuSetCollate 按 ICU 设置整理
- R search 给出 R 对象的搜索路径
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Extract or Replace Parts of a Data Frame。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。