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