当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R Extract.data.frame 提取或替换 DataFrame 的部分内容


R语言 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, ...

要提取或替换的元素。对于 [[[ ,这些是 numericcharacter ,或者,仅对于 [ ,为空或 logical 。数字值被强制转换为整数,就像 as.integer 一样。对于用 [ 替换,允许使用逻辑矩阵。

name

文字字符串或name(可能是backtick 引用)。

drop

合乎逻辑的。如果TRUE,结果将被强制为尽可能低的维度。默认情况下,如果只剩下一列,则删除,但如果只剩下一行,则不删除。

value

合适的替换值:如有必要,它将重复多次,并且可能会被强制:请参阅强制部分。如果是 NULL ,则在选择单个列时删除该列。

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.frameas.data.frame 那样),而是作为单个列插入。

警告

仅剩一行时的默认行为相当于指定 drop = FALSE 。要从 DataFrame 删除到列表,必须显式指定drop = TRUE

不应命名 dropexact 以外的参数:如果命名,则会出现警告,并且行为与此处的说明不同。

例子

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.frameExtract

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Extract or Replace Parts of a Data Frame。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。