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


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。